- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚意识到有 SignalObjectAndWait
Windows平台的API函数。但是已经有了SetEvent
和 WaitForSingleObject
.您可以将它们结合使用以实现与 SignalObjectAndWait
相同的目标。
基于MSDN , SignalObjectAndWait
比单独调用 SetEvent
和 WaitForSingleObject
更有效。它还指出:
A thread can use the
SignalObjectAndWait
function to ensure that a worker thread is in a wait state before signaling an object.
这句话我不是很理解,但是效率似乎并不是我们需要SignalObjectAndWait
的唯一原因。任何人都可以提供 SetEvent
+ WaitForSingleObject
无法提供 SignalObjectAndWait
提供的功能的场景吗?
最佳答案
我的理解是这个单一函数在避免以下情况的方式上更有效。
The
SignalObjectAndWait
function provides a more efficient way to signal one object and then wait on another compared to separate function calls such asSetEvent
followed byWaitForSingleObject
.
当你 SetEvent
和另一个 [esp.更高优先级] 线程正在等待此事件,线程调度程序可能会从信号线程中夺走控制权。当线程接收回控制权时,它所做的唯一事情是下面的WaitForSingleObject
调用,因此浪费了上下文切换这种小事。
使用 SignalObjectAndWait
提示内核说“嘿,无论如何我都会等待另一个事件,所以如果它对你有任何影响,不要过度地来回切换上下文” .
关于c++ - SignalObjectAndWait 考虑有 SetEvent 和 WaitForSingleObject 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18289229/
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
如果有 2 个或更多线程正在等待一个事件,是否 SetEvent取消阻止其中一个或全部(或其中一些)? 最佳答案 这取决于它是手动重置事件还是自动重置事件。如果是手动复位,那么可以释放多个线程,直到复
我发现多个 SetEvent 与 RegisterWaitForSingleObjectEx() 有一个棘手的行为。 #include #include using namespace Syste
我有一个线程,当它的函数退出循环时(退出由事件触发),它会进行一些清理,然后设置一个不同的事件让主线程知道它已完成。 但是,在某些情况下,SetEvent() 在设置线程的“我完成了”事件后似乎不会返
我无法理解PulseEvent或比赛条件。但是为了避免这种情况,我尝试改为SetEvent,每次尝试ResetEvent之前WaitForMultipleObjectsEx。 这是我的流程: 线程一-
我想为 2 个线程实现一个消息队列。线程 #1 将弹出队列中的消息并处理它。线程 #2 会将消息插入队列。 这是我的代码: Thread #1 //Pop message and process
我正在尝试使用 SetEvent 和 WaitForMultipleObjects 所以我写了几个函数,我想使用事件来同步它们。我希望第一个函数执行,然后指示第二个函数执行,这又指示第一个函数再次执行
环境:Win32,C/C++ 例如,所有三 (3) 个线程都可以用于向 main() 发出信号,表明它已完成操作。 但是哪一个是所有信号中最快的? 嗯... 最佳答案 所有三个选项都需要一个线程上下文
我的应用程序中有一个线程正在运行。在线程内,我正在等待自动重置事件退出。我想确保在使用后关闭事件句柄。我有两个选择。 调用SetEvent后立即调用事件的CloseHandle 在 WaitForSi
这个: http://msdn.microsoft.com/en-us/library/ms686915(VS.85).aspx 似乎不建议。 我有三个进程通过管道进行通信。进程 A 创建一个事件,进
我有一个自动重置事件对象,并且有一个线程在等待它。如果现在我调用 SetEvent,是否可以保证在 SetEvent 返回时事件对象是未发出信号的? 我有两个以 A-B-A-B-... 方式运行的线程
如果使用 setEvent 设置手动重置事件但不使用 ResetEvent 重置,会发生什么情况;并且该事件被多次触发。即在处理事件时,再次设置事件。 以下是示例任务: void foo() { ..
在一个不断创建和销毁许多线程的程序中,有时 WaitForSingleObject() 返回 WAIT_OBJECT_0,但未调用预期事件的 SetEvent()。我试图在网上查找资料,但找不到类似的
我有一个基于 Windows、iOS 和 OSX 构建的跨平台应用。 在我的 Windows 应用程序中,我创建了一个初始状态为未发出信号的事件对象。我有一个线程等待通过调用 WaitForSingl
我正在尝试制作一个 Shim 应用程序,它可以通知我何时何地调用 SetEvent 函数。要制作这个 shim 应用程序,我需要将我的自定义 API 注册到 的序号shim.def 中的 Seteve
我在线程中使用 ReadDirectoryChangesW() 来监视文件更改,并将 CreateFile() 返回的句柄传递给 ReadDirectoryChangesW()。我在 WaitForS
我刚刚意识到有 SignalObjectAndWait Windows平台的API函数。但是已经有了SetEvent和 WaitForSingleObject .您可以将它们结合使用以实现与 Sign
最近我需要将我的项目从 Windows 移植到 Linux,但存在一些 WIN32 API,如 CreateEvent、WaitForSingleObject、SetEvent 等。在 Linux 中
我写了一个小类来同步 Linux(实际上是 Android)和 Windows 的线程。 这是我的界面的 Win32 实现: class SyncObjectWin32 : public Sy
我写了一个小类来同步 Linux(实际上是 Android)和 Windows 的线程。 这是我的界面的 Win32 实现: class SyncObjectWin32 : public Sy
我是一名优秀的程序员,十分优秀!