接收Win32事件的顺序



我有3个不同的线程,它们使用WindowsSetEventAPI来分别设置一个事件。

DWORD thFunc1(LPVOID)
{
...
SetEvent(event1);
...
}
DWORD thFunc2(LPVOID)
{
...
SetEvent(event2);
...
}
DWORD thFunc3(LPVOID)
{
...
SetEvent(event3);
...
}

第四个线程正在使用WaitForMultipleObjectsAPI等待所有这些事件。

DWORD thCatch(LPVOID)
{
...
DWORD ret = WaitForMultipleObjects(3, arrHandles, FALSE, INFINITE);
...
}

我的问题有两个:

  1. 如果3个线程在几乎相同的时间戳发出事件信号,是否保证事件的接收顺序与发送顺序相同
  2. 如果问题1的答案是否定的,那么有没有任何方法可以使用Windows API实现这一点

如有任何意见,我们将不胜感激。

WaitForMultipleObjectsAPI调用在多个对象进入信号状态时做出单个承诺:

如果多个对象被发出信号,该函数将返回数组中第一个被发出信号的句柄的索引。

无法通过WaitForMultipleObjects调用确定多个对象的信号发送顺序。

如果事件发生的顺序很重要,您将不得不在其他地方记录这些信息。您可以使用带有原子推送和弹出操作的单链表,并在新条目到达时发出事件信号。

相关内容

  • 没有找到相关文章

最新更新