我尝试了几种方法来同步以下情况。我尝试的最后一种方法是使用事件在FifoQueueData();之后发出信号。然后,线程2将从事件中释放出来,并通过网络发送数据。问题在于,线程1的循环速度过快,并在线程2等待相同事件之前通知了该事件。这将导致事件等待直到超时。
thread1 {
for(1 .. 10) {
GenerateData();
FifoQueueData();
}
signal();
}
thread2 {
while(not signalled) {
WaitForQueuedData();
FifoDequeueData();
SendDataOverNetwork();
}
}
最佳答案
因为您在Windows上,所以确实可以使用线程消息队列进行同步(此特定队列是线程安全的,也许消息队列就是Olaf的“通常”的含义)。为此,请使用GetMessage
和PostThreadMessage
。
但是请注意,可以从其他代码访问消息队列-为了确保类型安全,您可以将对象放在自己的队列中,并且仅将线程消息队列用于唤醒另一个线程。 (要了解为什么这很重要,请阅读“窗口粉碎攻击”)。在这种情况下,您最好只使用自动重置事件。
关于c - 如何同步以下情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32281480/