jjzjj

setEvent

全部标签

Windows:在什么情况下 SetEvent() 可能不会立即返回?

我有一个线程,当它的函数退出循环时(退出由事件触发),它会进行一些清理,然后设置一个不同的事件让主线程知道它已完成。但是,在某些情况下,SetEvent()在设置线程的“我完成了”事件后似乎不会返回。此线程是DLL的一部分,问题似乎发生在DLL加载/附加、线程启动、线程结束以及DLL分离/卸载多次且应用程序在此期间没有关闭之后。在此问题发生之前必须重复此序列的次数是可变的。如果您怀疑我知道我在说什么,我已经通过将SetEvent()调用与对OutputDebugString()的调用放在一起来确定发生了什么。出现SetEvent()之前的输出。然后,等待线程产生指示事件已设置的输出。但

linux - Linux 中是否有任何 CreateEvent、WaitForSingleObject 和 SetEvent 等价物?

最近我需要将我的项目从Windows移植到Linux,但存在一些WIN32API,如CreateEvent、WaitForSingleObject、SetEvent等。在Linux中是否有任何等效项?LinuxOSAPI或自己实现的函数都可以。 最佳答案 好吧,您没有提到您使用的编程语言。例如在C++11中你可以这样做。您可以在此处找到示例:https://github.com/moya-lang/Event 关于linux-Linux中是否有任何CreateEvent、WaitForS

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

如果使用setEvent设置手动重置事件但不使用ResetEvent重置,会发生什么情况;并且该事件被多次触发。即在处理事件时,再次设置事件。以下是示例任务:voidfoo(){...SetEvent(hEvent1);...}voidfoo1(){...SetEvent(hEvent2);...}intMainHandler(){...dwEvent=WaitForMultipleObjects(2,ghEvents,//arrayofobjectsFALSE,//waitforanyobject5000);switch(dwEvent){casehEvent1://dosometh

c++ - 调用 SetEvent 后调用 CloseHandle

我的应用程序中有一个线程正在运行。在线程内,我正在等待自动重置事件退出。我想确保在使用后关闭事件句柄。我有两个选择。调用SetEvent后立即调用事件的CloseHandle在WaitForSingleObject行之后调用CloseHandle请建议我哪种方法是正确的。 最佳答案 当所有线程都使用完后关闭句柄。在WaitForSingleObject听起来对我来说很合理(因为如果成功,SetEvent必须已经完成)。或者-为每个线程提供自己的句柄拷贝(例如通过DuplicateHandle)并让每个线程在完成时关闭它们的拷贝。这更

c++ - SignalObjectAndWait 考虑有 SetEvent 和 WaitForSingleObject 的目的是什么?

我刚刚意识到有SignalObjectAndWaitWindows平台的API函数。但是已经有了SetEvent和WaitForSingleObject.您可以将它们结合使用以实现与SignalObjectAndWait相同的目标。基于MSDN,SignalObjectAndWait比单独调用SetEvent和WaitForSingleObject更有效。它还指出:AthreadcanusetheSignalObjectAndWaitfunctiontoensurethataworkerthreadisinawaitstatebeforesignalinganobject.这句话我不是

c++ - 单个 SetEvent() 可以触发多个 WaitForSingleObject()

这个:http://msdn.microsoft.com/en-us/library/ms686915(VS.85).aspx似乎不建议。我有三个进程通过管道进行通信。进程A创建一个事件,进程B和C各自使用WaitForSingleObject(在第二个线程中)。所以现在我们有-TWO-进程,每个进程都在等待-SINGLE-事件。​​进程A使用SetEvent()触发事件,进程B响应,进程C不响应。结论:每个WaitForSingleObject()都需要一个唯一的事件...对吗? 最佳答案 使用手动重置事件从单个事件触发多个线程。

c++ - Windows 的 SetEvent 的确切行为是什么?

我有一个自动重置事件对象,并且有一个线程在等待它。如果现在我调用SetEvent,是否可以保证在SetEvent返回时事件对象是未发出信号的?我有两个以A-B-A-B-...方式运行的线程。一旦A唤醒B,A将开始等待B。如果我可以在发出信号后立即等待同一个事件对象,那么......我可以保存一个事件对象。如果你问我为什么不只使用一个线程,它们在不同的进程中。 最佳答案 当服务员被释放时,事件变为无信号状态。无法保证在调用SetEvent返回之前释放服务员。 关于c++-Windows的S