问题描述
|
我正在使用VC2005进行开发,而我遇到了线程问题。
我有一个从队列中取出数据并发送数据的线程。但是此线程发送一个请愿书,并且必须等待答案发送新的请愿书(我想设置超时以防止无限超时)。
我有一个像这样的线程:
while (true){
dequeue()
send()
WaitForSingleObject(ptClass->getMutex(),10000);
}
但是,这个WaitForSingleObject永远不会停止...我有这样的初始化事件:
HANDLE ghMutex = CreateEvent(NULL,FALSE,\"\");
这个想法是阻止线程停止发送数据,当答案到来时,取消阻止该线程发送新的请愿书...为什么永不停止?
问候
解决方法
您拥有的该线程正在等待事件被设置为发出信号,以便可以再次将其唤醒。您必须将事件设置为使用SetEvent发出信号。由于我不知道您的体系结构,因此不确定您将在哪里进行操作,但这就是所缺少的。
WaitForSingleObject正在将线程移出CPU上下文,但不会再次被唤醒。
如果您希望它等待直到事件被设置为已发出信号,并且您不能保证它将立即发生,则应将“等待”的超时设置为“无限”。
您没有使用互斥锁,而是使用了AutoResetEvent,但必须对其进行设置!