gpt4 book ai didi

c++ - CWinThread 查询 (MFC)

转载 作者:行者123 更新时间:2023-11-30 03:08:14 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com