关于同步对象的用法 用法倒正确,不过 Return x有必要上锁吗。 { cs.Lock(); x = 1; cs.Unlock(); return x;} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样用是错误的,如果把return x上锁,那么 cs.Unlock(); 这句永远执行不到,也就是说无法开锁。实际上因为互斥量一般是用来保护全局资源的,因此x应当是全局变量,没有必要再作为返回值返回。 好像CCriticalSection有问题,我曾经用过,但有时还发现有死锁出现,加入调试信息后发现有时居然能够连续两次加锁成功(在两个不同的线程里,信不信有你)!估计可能是一个线程的加锁代码正在执行时,进程调度到了另一个线程的加锁代码,真是岂有此理!我建议用自己解决临界区问题,但有一点要注意,循环中Sleep的时间要选为随机数,否则也会出现连续加锁两次成功的问题。 CCriticalSection,CEvent等几个使用方法都差不多,只要在要控制同步的数据时把它Lock住,最保险的方法在判断Lock()的返回值,如果出错,再查找原因,然后在使用完后再Unlock(),这里也可以判断返回值是否成功。 小心使用CCriticalSection,在你的系统资源很少的时候,它很容易抛出异常。同一个线程中可以多次进入同一个临界区,注意解锁。注意同一个线程中不同的临界区之间的进入顺序,否则容易“死锁”或“饥饿”。 ocx实现回调函数与JS通讯?跪求答案 对于这张图片,自动分析出图中各个竖向的黑色条纹的位置谁有好的想法呢? 急!添加虚函数问题! 鼠标选定矩形范围后,怎样得到LPRECT对象 如何将字符串输出到打印机来打印??? 怎样用VC编写一个控制Print Port的DLL 如何调试在程序中新生成的进程? 请问:在Windows下怎样读写检测所有物理内存 送分500,征名 求助:怎样读写MP3中包含的作者、专辑等信息? 请教:怎样把windowsNT的系统分区fat16格式转换为NTFS格式 如何直接使用网卡开发通讯程序,不用协议
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货