我刚开始学习 MFC,我正在编写一个基于对话框的应用程序,以便更好地理解多线程。
主对话框有一个进度条、一个开始按钮和一个取消按钮。
单击开始按钮时,我正在创建一个工作线程来进行一些处理(通过 API 调用),主线程负责进度条。
我已经定义了几个 Windows 消息来更新和停止进度条状态
WM_UPDATE_CONTROL
WM_STOP_CONTROL
下面是我到目前为止创建的代码
HWND* phObjectHandle;
CWinThread* thread;
void CprogCtrlDlg::OnBnClickedStart() {
phObjectHandle = new HWND; // Set object handle for Worker thread
*phObjectHandle = GetSafeHwnd();
// create worker thread
if(NULL == (thread = AfxBeginThread(ThreadFunc, phObjectHandle))) {
EndDialog(IDCANCEL);
}
AfxMessageBox(L"Thread started");
// Set Progress bar to marquee
}
void CprogCtrlDlg::OnBnClickedCancel() {
// kill the Worker thread
}
UINT CprogCtrlDlg::ThreadFunc(LPVOID pParam) {
HWND *pObjectHandle = static_cast<HWND *>(pParam);
CprogCtrlImpDlg* threadDlg = (CprogCtrlImpDlg*) pParam;
return threadDlg->ThreadFuncRun(pObjectHandle);
}
UINT CprogCtrlDlg::ThreadFuncRun(HWND* pObjectHandle) {
::PostMessage(*pObjectHandle, WM_UPDATE_CONTROL, 0, 0);
// repetitive API CALL in a loop
::PostMessage(*pObjectHandle, WM_STOP_CONTROL, 0, 0);
AfxMessageBox(L"Thread completed");
return 0;
}
如果单击取消按钮,我想从父线程终止工作线程。
我尝试使用 TerminateThread()(虽然它不是建议的),但我无法杀死线程。
请评论并分享您对从父线程终止工作线程的想法。
我在 Windows 7 上使用 Visual Studio 2010
TIA