(3)在檔案中定義執行緒傳遞引數的資料結構,**如下:
// demodlg.h
typedef struct thread_param
_thread_param;
(4)在cdemodlg類中新增成員變數,**如下:
// demodlg.h
protected:
cwinthread* m_pthread;
thread_param m_threadparam;
(5)在cdemodlg類的建構函式中初始化成員變數,**如下:
// demodlg.cpp
cdemodlg::cdemodlg(cwnd* pparent /*=null*/)
: cdialog(cdemodlg::idd, pparent)
(6)在cdemodlg類的oninitdialog函式中新增如下**:
// demodlg.cpp
bool cdemodlg::oninitdialog()
(7)在檔案中定義執行緒訊息,**如下:
// demodlg.h
#define wm_threadmsg wm_user+1
(8)在檔案中定義執行緒函式,**如下:
// demodlg.h
uint threadproc(lpvoid pparam);
// demodlg.cpp
uint threadproc(lpvoid pparam)
return 0;
}(9)在cdemodlg類中分別為button控制項新增bn_clicked新增訊息處理函式,**如下:
// demodlg.cpp
void cdemodlg::onbeginthread()
m_threadparam.hwnd = m_hwnd;
m_threadparam.bexit = false;
//啟動執行緒,初始為掛起狀態
m_pthread = afxbeginthread(threadproc, &m_threadparam,
thread_priority_above_normal, 0, create_suspended);
//執行緒結束時不自動刪除
m_pthread->m_bautodelete = false;
//恢復執行緒執行
m_pthread->resumethread();
}void cdemodlg::onendthread()
m_threadparam.bexit = true;
//等待執行緒結束
::waitforsingleobject(m_pthread->m_hthread, infinite);
delete m_pthread;
m_pthread = null;
}(10)在cdemodlg類中新增自定義訊息處理函式,**如下:
// demodlg.h
afx_msg lresult onmsgfunc();
// demodlg.cpp
begin_message_map(cdemodlg, cdialog)
on_message(wm_threadmsg, onmsgfunc)
end_message_map()
lresult cdemodlg::onmsgfunc()
MFC多執行緒 如何安全終止MFC多執行緒
3 在檔案中定義執行緒傳遞引數的資料結構,如下 demodlg.h typedef struct thread param thread param 4 在cdemodlg類中新增成員變數,如下 demodlg.h protected cwinthread m pthread thread para...
執行緒如何終止呢?
執行緒終止的三種方法 1 直接呼叫執行緒的stop方法 通過stop方法可以很快速 方便地終止乙個執行緒 那為什麼jdk不推薦使用stop終止執行緒的方法的原因,因為它很暴力會帶來資料不一致性的問題。如果你確定直接終止對你的業務邏輯沒有影響,也可以使用,但是因為被 deprecated標註了,jdk...
如何暫停和終止執行緒
你能看到這篇文章,說明你已經知道如何建立執行緒了,因此,這裡就不說明執行緒的建立了,詳細說一下執行緒的暫停和終止。我們首先了解一下,什麼是前台執行緒和後台執行緒。net的公用語言執行時 clr 能區分兩種不同型別的執行緒 前台執行緒和後台執行緒。這兩者的區別就是 應用程式必須執行完所有的前台執行緒才...