【发布时间】:2023-03-29 18:17:01
【问题描述】:
我有一个多线程嵌入式架构,其中包含 6 个特定于应用程序的进程,这些进程在执行初始化进程时执行。同样,每个线程都有自己运行的线程数。
我要做的是根据设备是否连接到电脑来暂停 1 个特定进程的正在运行的线程。
我已经尝试四处搜索,我发现最接近我正在寻找的内容如下:How to obtain list of thread handles from a win32 process?
但是,该代码返回所有正在运行的线程的列表。这对我不起作用,因为我试图暂停所有获得的线程,假设它们是从同一个进程中获得的,因此我也不检查它们属于哪个进程。
同样,我正在获取另一个进程中一个进程的运行线程列表。
Windows 中是否存在允许此类控制的现有方法,还是我不得不从整个列表中确定我需要挂起的线程?
【问题讨论】:
-
我想要做的是暂停正在运行的线程。 不,那是你想要做的最后一件事。阅读
SuspendThread的文档。特别是这个函数主要是为调试器设计的。它不打算用于线程同步。如果调用线程尝试获取挂起线程拥有的同步对象,则在拥有同步对象(例如互斥锁或临界区)的线程上调用 SuspendThread 可能会导致死锁。 向线程发出挂起信号. -
@DavidHeffernan 与使用
SuspendThread挂起线程有什么不同?我不太确定你的“给线程发信号”的意思。 -
你用一个事件给线程发信号。线程定期检查事件。当它被设置时,它会等到事件被取消设置。但它必须从内部完成,以便线程在安全的情况下暂停自身。只有线程才能知道。
-
@DavidHeffernan 这种方法的问题是我试图从进程 2 中挂起进程 1 的线程。
-
没关系。事件可以在进程之间共享。无论如何,你在这件事上别无选择。您无法从外部可靠地挂起线程。您需要接受这一点,然后转向合作解决方案。
标签: c++ multithreading winapi