在c ++中挂起和恢复线程

| 我的应用程序必须每隔几微秒暂停并恢复一个不同的进程。 它只有在感觉好像中止过程不均匀的时候才可以正常工作。 我使用win API:
ResumeThread
SuspendThread
。 另一方面,我尝试了一些不同的方法。 我像往常一样用
SuspendThread
挂起了线程,但是当我恢复它时,我这样做:
while (ResumeThread(threadHandle) > 0);
而且运行速度更快,并且以统一的速度运行其他过程。 为什么会发生?是否有可能有时线程被挂起两次,然后执行ResumeThread命令? 谢谢 :)     
已邀请:
SuspendThread()
调用不会立即暂停线程。保存执行上下文需要花费一些时间,因此当线程尚未挂起时可能会调用ѭ5。这就是ѭ6工作的原因。若要确定当前线程状态,可以调用NtQueryInformationThread(),但只能在Windows的NT版本中。 如果辅助线程中存在循环,则可以使用“手动重置事件”来更改同步。主线程应调用ѭ7暂停线程,并调用ѭ8继续线程。每个循环的辅助线程应调用ѭ9。     
我遵循了Damon的建议,从代码中删除了暂挂/继续,而是使用了一个同步对象,我的池线程在完成工作后将无限期等待,并在为其分配工作后由服务器线程发出同样的信号。 现在唯一必须使用暂停的情况是第一次创建线程时,在将工作分配给线程之后,该线程将从服务器线程中恢复。一遍又一遍地在线程池中使用创建的线程来做一些工作。 它像魅力一样运作。 谢谢达蒙! 问候, 阿杰     
那就是de loop的样子
for(i=0;i<num;i++) {     
  while (ResumeThread(threadHandle) > 0);
  ResumeThread(threadHandle)
  SuspendThread(threadHandle);      
}
SuspendThread
花费了几毫秒,所以while循环继续进行,直到线程被挂起,然后再次调用线程进程
SuspendThread
函数,这是调用
GetProcessContext
来查看EIP的好方法     

要回复问题请先登录注册