工作線程AfxBeginThread的使用
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
AFX_THREADPROC pfnThreadProc, //指向控制函數的地址
LPVOID pParam, //指向傳遞給控制函數的參數
int nPriority /* = THREAD_PRIORITY_NORMAL */ , //指定線程的優先級
UINT nStackSize /* = 0 */ , //指定堆棧大小
DWORD dwCreateFlags /* = 0 */ , //創建標識
LPSECURITY_ATTRIBUTES lpSecurityAttrs /* = NULL */ //安全屬性
)
{
LPTSTR pMessage = (LPTSTR)pParam;
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread Message" ), MB_OK);
return 0 ;
}
{
AfxBeginThread(MessageThread, _T("Greetings from your thread!" ));
CView::OnLButtonDown(nFlags, point);
}
工作線程通常用來執行一些后臺任務,如:數據計算、后臺殺毒等等。因為不需要創建窗口和處理用戶消息,編寫比較容易,在程序中只要調用AfxBeginThread 函數就可以創建并啟動一個工作線程了。
AfxBeginThread 的原型如下:
CWinThread *AfxBeginThread(AFX_THREADPROC pfnThreadProc, //指向控制函數的地址
LPVOID pParam, //指向傳遞給控制函數的參數
int nPriority /* = THREAD_PRIORITY_NORMAL */ , //指定線程的優先級
UINT nStackSize /* = 0 */ , //指定堆棧大小
DWORD dwCreateFlags /* = 0 */ , //創建標識
LPSECURITY_ATTRIBUTES lpSecurityAttrs /* = NULL */ //安全屬性
)
從上面參數可以看到,只有前兩個參數是必須的,其余參數都使用默認的話,就可創建了一個具有普通優先級別的線程。
示例:編寫一個應用程序,當在程序窗口按下鼠標左鍵,啟動一個線程,該線程可以在屏幕上顯示一個信息框。
1.新建單文檔程序;
2.在視圖類CPP文件添加一個準備作為線程的函數:
{
LPTSTR pMessage = (LPTSTR)pParam;
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread Message" ), MB_OK);
return 0 ;
}
3.在視圖類的鼠標左鍵消息響應函數中創建和啟動線程:
void CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point){
AfxBeginThread(MessageThread, _T("Greetings from your thread!" ));
CView::OnLButtonDown(nFlags, point);
}
程序運行結果: