c++ - CWinThread 查询 (MFC)

标签 c++ multithreading stl mfc

我有一个非常简单的问题,关于 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/

相关文章:

c++ - std::count 和 std::find 之间的性能差异

c++ - STL - 以下代码的问题是什么?

c++ - 模板中的模板。在模板函数中特化模板类

c++ - 如何用 C++ 代码解决这个 cmake 问题?

c++ - 在新线程中创建对话框

c++ - 带对象的循环 vector

c - 线程和具有依赖关系的嵌套 for 循环(C 中的 pthreads)

python - 无法使用 pickle 和多个模块加载文件

c++ - WMI:监视注册表更改

c++ - 仅重新初始化派生类中的所有成员变量