gpt4 book ai didi

c++ - C++中线程的挂起和恢复

转载 作者:可可西里 更新时间:2023-11-01 11:38:24 28 4
gpt4 key购买 nike


我的应用程序必须每隔几 *microsec*s 暂停和恢复一个不同的进程。
它工作正常,只是有时感觉它暂停了非制服时间的过程。
我使用 win API:ResumeThreadSuspendThread

另一方面,我尝试了一些不同的东西。
我像往常一样使用 SuspendThread 暂停了线程,但是当我恢复它时,我确实喜欢这样:

while (ResumeThread(threadHandle) > 0);

而且它工作得更快,并且以统一的速度运行其他进程。
为什么会这样?有没有可能有时候线程被挂起两次,然后执行ResumeThread命令?
谢谢 :)

最佳答案

SuspendThread() 调用不会立即挂起线程。保存执行上下文需要多次时间,因此 ResumeThread() 可能会在线程尚未挂起时被调用。这就是 while (ResumeThread(threadHandle) > 0); 起作用的原因。要确定当前线程状态,您可以调用 NtQueryInformationThread() ,但仅限于 NT 版本的 Windows。

如果您在辅助线程中有一个循环,您可以使用手动重置事件更改您的同步。主线程应调用 ResetEvent() 挂起线程,并调用 SetEvent() 恢复。辅助线程每次循环都应调用WaitForSingleObjectEx()

关于c++ - C++中线程的挂起和恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720326/

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