gpt4 book ai didi

windows - 在没有 ResetEvent 的情况下调用 setEvent

转载 作者:可可西里 更新时间:2023-11-01 10:06:23 29 4
gpt4 key购买 nike

如果使用 setEvent 设置手动重置事件但不使用 ResetEvent 重置,会发生什么情况;并且该事件被多次触发。即在处理事件时,再次设置事件。

以下是示例任务:

void foo()
{
...
SetEvent(hEvent1);
...
}
void foo1()
{
...
SetEvent(hEvent2);
...
}
int MainHandler()
{
...
dwEvent = WaitForMultipleObjects(2,
ghEvents, // array of objects
FALSE, // wait for any object
5000);
switch(dwEvent)
{
case hEvent1:
//do something
break;
case hEvent2:
//do something
break;
}
}

现在,假设当 hEvent1 的情况正在执行时(即它仍然设置),hEvent1 又以某种方式被触发。我故意不放置 ResetEvent(hEvent1),即使它是手动重置事件。那么,我们是否存在竞争条件?

最佳答案

事件就像 bool 标志 - 可以将 true 分配给它两次。没有人可能正在等待当前发出信号的事件,因此当您将其设置为再次发出信号时不会发生任何事情。

我不确定“事件正在处理”是什么意思。似乎您两次使用“事件”一词具有两种不同的含义 - 一个由 HANDLE 表示的内核对象,以及“我的程序必须做的事情”。

关于windows - 在没有 ResetEvent 的情况下调用 setEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20985037/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com