thread即為執行緒 一個程式有兩個以上執行緒就叫做multi-thread
今天就介紹thread基本常識
首先thread開啟可以使用AfxBeginThread()
其中前面兩個參數比較重要
第一個是新開的執行緒所要執行的function
第二個是要傳給他的參數
AfxBeginThread()成功之後 會傳回所開啟thread的指標
我們可以將他儲存起來 以後我們要對thread做操作可以用到他
以下範例 示範如何開啟一個執行緒
以上MyThread為新執行緒所要執行的function
裡面可以傳入一個參數 通常可以傳入一個structure指標 將需要的資訊都放在裡面
在這範例中 是直接將這個物件給傳進去 這個做法是非常常見的
另外 由於windows並未提供強制關閉thread功能 故我們當然要自己做一個中斷的機制
在這個例子中 我們是透過g_bThreadContinue這個參數來控制
以下示範如何中斷這個thread
有時 又需要將thread暫停或繼續 以下範例示範如何暫停以及繼續一個thread
以上m_thread為執行緒開啟時 就已經保留起來的指標
可以用來對執行緒做操作
最後 如果我們要做同步的動作 希望知道何時執行緒執行完成
以下範例將會一直等到執行緒執行結束 才會return
以上為對執行緒的基本操作
今天就介紹thread基本常識
首先thread開啟可以使用AfxBeginThread()
其中前面兩個參數比較重要
第一個是新開的執行緒所要執行的function
第二個是要傳給他的參數
AfxBeginThread()成功之後 會傳回所開啟thread的指標
我們可以將他儲存起來 以後我們要對thread做操作可以用到他
以下範例 示範如何開啟一個執行緒
BOOL g_bThreadContinue = TRUE; UINT MyThread(LPVOID pVar) { // 迴圈需要一個離開的機制 才不會無法關閉 while(g_bThreadContinue) { CMyDlg *pDlg = (CMyDlg*)pVar; // 所要執行的程式碼放這裡 }; return 0; } void CMyDlg::OnOpenThread() { m_thread = AfxBeginThread(MyThread,(LPVOID)this); } |
裡面可以傳入一個參數 通常可以傳入一個structure指標 將需要的資訊都放在裡面
在這範例中 是直接將這個物件給傳進去 這個做法是非常常見的
另外 由於windows並未提供強制關閉thread功能 故我們當然要自己做一個中斷的機制
在這個例子中 我們是透過g_bThreadContinue這個參數來控制
以下示範如何中斷這個thread
void CMyDlg::TerminateThread() { g_bThreadContinue = FALSE; } |
有時 又需要將thread暫停或繼續 以下範例示範如何暫停以及繼續一個thread
void CMyDlg::SuspendThread() { m_thread->SuspendThread(); } void CMyDlg::ResumeThread() { m_thread->ResumeThread(); } |
可以用來對執行緒做操作
最後 如果我們要做同步的動作 希望知道何時執行緒執行完成
以下範例將會一直等到執行緒執行結束 才會return
void CMyDlg::WaitThreadTerminate() { ::WaitForSingleObject(m_thread,INFINITE); } |
以上為對執行緒的基本操作
全站熱搜
留言列表