线程被释放是什么意思啊?
vc中SetEvent设置事件的状态为有标记,释放任意等待线程。这句话什么意思啊?有标记和释放是什么意思啊?怎么理解啊,拜托了...
vc中SetEvent设置事件的状态为有标记,释放任意等待线程。这句话什么意思啊?
有标记和释放是什么意思啊?怎么理解啊,拜托了 展开
有标记和释放是什么意思啊?怎么理解啊,拜托了 展开
2个回答
展开全部
一个线程在event对象上调用WaitForSingleObject
如果这个对象状态是有标记的,那么这个调用马上返回
如果这个对象状态是没有标记的,那么操作系统会将调用的线程暂停运行
当一个对象的状态由没有标记变为有标记,操作系统会恢复所有因为“在等待event对象变为有标记状态”而暂停运行的线程
如果这个对象状态是有标记的,那么这个调用马上返回
如果这个对象状态是没有标记的,那么操作系统会将调用的线程暂停运行
当一个对象的状态由没有标记变为有标记,操作系统会恢复所有因为“在等待event对象变为有标记状态”而暂停运行的线程
更多追问追答
追问
谢谢,但是我的问题还没有解决,我的问题是:如果对象状态是没有标记的,那么线程就不能启动只能WaitForSingleObject等待,当一个对象的状态由没有标记变为有标记,那么所有的线程就调用WaitForSingleObject开抢,哪个线程抢到了就可以启动哪个线程,是这样的意思么?
追答
不是。SetEvent以后所有线程就都被唤醒了。Event不是Semaphore,不会有“哪个线程抢到”的问题。它不需要抢,它只是一种状态
对于自动重置事件,msdn上有这样的说明
When the state of an auto-reset event object is signaled, it remains signaled
until a single waiting thread is released; the system then automatically resets
the state to nonsignaled. If no threads are waiting, the event object's state
remains signaled.
详细情况我不是很清楚,因为自己没用过。不过Windows并发编程指南这本书上似乎有专门对这种情况给了什么解说,书现在放在学校机房里没在身边,暂时没法查……如果一定要知道自动重置事件在这里有什么独特的行为的话我明天过去的时候查?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询