MFC AfxBeginThread 启动线程 如何关闭线程
时间: 2024-10-17 16:13:03 浏览: 1
在MFC中,使用`AfxBeginThread`是一个更高级别的API来创建并开始新线程,它会自动管理线程的生命周期。下面是如何通过`AfxBeginThread`启动并关闭线程的一个例子:
```cpp
// 创建线程函数
DWORD WINAPI MyThreadProc(LPVOID lpParam) {
// 这里是你想要线程执行的任务
// ...
return 0; // 返回值通常表示线程结束时的状态
}
// 开启线程
void StartNewThread() {
DWORD dwThreadId;
// 使用AfxBeginThread创建新的工作线程,并传递自定义线程函数的地址
AfxBeginThread(MyThreadProc, NULL, &dwThreadId, THREAD_PRIORITY_NORMAL, CREATE_SUSPENDED, NULL);
// 线程可能还没开始运行,所以这里可以先做其他事情
// 启动线程(如果需要)
ResumeThread(dwThreadId); // 如果你想让线程立即开始执行
}
// 关闭线程
void CloseThread() {
if (IsThreadRunning()) { // 判断线程是否还在运行
// 你可以选择优雅的方式,如设置标志,然后等待线程退出
bool bTerminated = false;
SetThreadTerminateFlag(&bTerminated); // 设置一个终止标志
while (!bTerminated && IsThreadRunning()) {
Sleep(100); // 每隔一段时间检查一下线程状态
}
// 如果线程尚未退出,强制结束
if (!bTerminated)
TerminateThread(GetCurrentThread(), -1); // 使用默认错误码-1强制结束
}
}
```
在上面的例子中,线程在`MyThreadProc`中执行,`StartNewThread`首先创建线程但保持其暂停,然后在适当的时候调用`ResumeThread`启动它。关闭线程时,我们首先检查线程是否运行,然后可以选择等它自然结束(通过设置终止标志),或者强制结束。
阅读全文