【发布时间】:2011-08-08 21:14:30
【问题描述】:
我的应用程序必须每隔 *microsec*s 暂停和恢复一个不同的进程。
它工作正常,只是有时感觉它会暂停非统一时间的过程。
我使用 win API:ResumeThread 和 SuspendThread。
另一方面,我尝试了一些不同的方法。
我像往常一样用SuspendThread 暂停了线程,但是当我恢复它时,我确实喜欢这样:
while (ResumeThread(threadHandle) > 0);
它的工作速度更快,并且以统一的速度运行其他进程。
为什么会这样?是否有可能有时线程被挂起两次,然后执行 ResumeThread 命令?
谢谢:)
【问题讨论】:
-
“是的,有可能”。您需要显示更多代码。
-
如果您想自己进行调度,您可能希望使用光纤而不是线程(例如,请参阅 ConvertThreadToFiber:msdn.microsoft.com/en-us/library/ms682115.aspx)。
-
我不能,这真的是很多代码。但理论上这可能是原因吗?我在哪里可以读到它?
-
用三个字:“不要这样做!”。 SuspendThread 是难以跟踪的死锁的来源。改用适当的同步(例如命名信号量)。让其他进程block不suspended。
-
@Idov:请从更系统的角度添加更多关于实际残局目标的背景信息。您所写的内容表明存在一个重大的体系结构缺陷,其中最小的缺陷是试图将 Windows 用于实时任何事情。
标签: c++ windows resume suspend