我有一个非常简单的问题,关于 CWinThread 如何工作以及每次调用 ResumeThread() 时入口点在哪里。我正在寻找一个看起来类似于“主”函数的条目,我可以在其中执行一些操作和分支。
我还想知道如何在不同线程的任何时候结束或终止正在运行的线程。我应该把 AfxEndThread() 放在哪里?或者简单地调用 pThread->ExitInstance()?
我的最后一个问题是,如果我想创建多个线程,我如何使用 vector 在标准模板库 (STL) 中组织它们?
谢谢。
最佳答案
我认为您对线程的使用方式存在根本性的误解。
SuspendThread()
和 ResumeThread()
等函数以及终止线程的函数并不是您控制线程的方式。事实上,SuspendThread()
和 ResumeThread()
映射到的 Windows API 函数被记录为供调试器使用。如果 MFC 文档也这么说就好了,但它没有。
如果您使用 SuspendThread()
来暂停一个线程,那么当您暂停它时,您不知道它在做什么。如果它恰好持有锁,那么您可能会死锁您的程序。
控制线程的正常机制是使用事件对象向线程发出信号,表明您希望它暂停或恢复。使用事件对象而不是简单的 bool 标志的原因是可以等待事件。这意味着您可以将线程置于非忙碌状态,不消耗 CPU,并在控制线程发出信号时启动它。
关于终止,调用TerminateThread()
绝对是最后的手段。这样做会使您的同步对象(例如关键部分、互斥体等)处于未定义状态,并且很可能导致您的软件出现可怕的缺陷。同样对于终止,您应该向线程发出您希望它退出的信号,然后等待它完成。
关于c++ - CWinThread 查询 (MFC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5246934/