获取特定进程的线程句柄/ id

时间:2015-06-09 19:55:50

标签: c++ multithreading winapi

我有一个多线程嵌入式架构,其中包含6个特定于应用程序的进程,这些进程在执行初始化过程时执行。同样,每个都有自己的运行线程数。

我想要做的是根据设备是否连接到电脑来暂停1个特定进程的运行线程。

我试过四处寻找,最接近我发现的是以下内容:How to obtain list of thread handles from a win32 process?

但是,该代码返回所有正在运行的线程的列表。这对我不起作用,因为我试图暂停所有获得的线程,假设它们是从同一个进程获得的,因此我也不检查它们属于哪个进程。

同样,我正在获取另一个进程中进程的运行线程列表。

Windows中是否存在允许此类控制的现有方法,或者我是否需要确定需要从整个列表中挂起哪些线程?

1 个答案:

答案 0 :(得分:4)

而不是试图强行暂停线程(这可能会给你带来麻烦,当你暂停"不那么幸运的时刻")你宁愿使用一个名为CreateEvent()的手册复位。

  • 在进程之间轻松共享命名事件。您只需使用相同的名称CreateEvent()。事件的典型名称是MyCompany_MyProduct_MyFeature_EventName,以防止意外碰撞。
  • 当您WaitForSingleObject()开启"设置"事件,等待立即得到满足。
  • 当你等待"重置"事件,等待暂停你的线程,直到事件被设置。
  • 当你的第一个应用程序没有做任何工作时,会让其线程等待事件,因此可以安全地暂停。
  • 您将设置并重置第二个应用程序中的事件以控制第一个应用程序。
  • 这样,您就不需要枚举线程,而且它更健壮。