首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

CE5.0下的多线程同步有关问题

2012-02-20 
CE5.0下的多线程同步问题在CE5.0下实验多线程同步。实现了3个死循环的子线程,用Event事件来同步。子线程1需

CE5.0下的多线程同步问题
在CE5.0下实验多线程同步。实现了3个死循环的子线程,用Event事件来同步。子线程1需要等待子线程2和子线程3对数据的操作完成后才开始下一次的循环。
我在子线程1中使用WaitForMultipleObjects(2,hEvent,TRUE,INFINITE)来等待,其中HANDLE hEvent[2]是这样定义的。结果发现:
子线程1,WaitForMultipleObjects根本就没有等待子线程2的通知事件,一直在循环。子线程3也一直循环。
后来将WaitForMultipleObjects修改如下
WaitForSingleObject(hEvent[0],INFINITE);
WaitForSingleObject(hEvent[1],INFINITE);
就得到我想要的结果了。
这是为什么?从逻辑上讲,这两种方式应该是一样的吧。
难道是我用的这个CE5.0不支持WaitForMultipleObjects?
还望高人帮我分析一下。

[解决办法]
有点怪,如果能把你所有的代码贴出来就好分析了

btw:CE5.0支持WaitForMultipleObjects
[解决办法]

探讨
结果发现:
子线程1,WaitForMultipleObjects根本就没有等待子线程2的通知事件,一直在循环。
子线程3也一直循环。
后来将WaitForMultipleObjects修改如下
WaitForSingleObject(hEvent[0],INFINITE);
WaitForSingleObject(hEvent[1],INFINITE);
就得到我想要的结果了。


[解决办法]
探讨
ce5.0不允许wait type设为true.这个你是从哪里知道的啊。
你提到的“线程1会不会继续等待WaitForSingleOb(hEvent[0],);”,这个我没在CE5.0上调试过,在桌面PC上是可行的,不会阻塞线程1,我试过了。你说的“从而不能及时退出循环”我就不太明白了,因为我的3个子线程本来就是死循环,我是定时到了之后ExitThread的。呵呵,这个方式不怎么好。
谢谢visualthinking。

热点排行