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

Obtain thread handles/id of a specific process

本文关键字:句柄 id 线程 进程 获取      更新时间:2023-10-16

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

我想做的是根据设备是否连接到pc,暂停一个特定进程的运行线程。

我试着四处搜索,最接近我发现我在寻找的是以下内容:如何从win32进程获得线程句柄列表?

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

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

是否有一个现有的方法从窗口,允许这样的控制,或者我不得不确定哪些线程我需要暂停从整个列表?

与其尝试强制挂起线程(当你在"不那么幸运的时刻"挂起时可能会给你带来麻烦),不如使用一个名为CreateEvent()的手动重置。

  • 命名事件很容易在进程之间共享。您只需再次使用相同的名称CreateEvent()。事件的典型名称为MyCompany_MyProduct_MyFeature_EventName,以防止意外碰撞。
  • 当你WaitForSingleObject() on"set"事件时,等待立即被满足。
  • 当你等待"reset"事件时,等待会挂起你的线程,直到事件被设置。
  • 你的第一个应用程序将有它的线程等待事件,当他们没有做任何工作,因此可以安全挂起。
  • 设置和重置第二个应用程序的事件来控制第一个应用程序。
  • 这样,你就不需要枚举线程,而且它更健壮。