thread即為執行緒 一個程式有兩個以上執行緒就叫做multi-thread
今天就介紹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);

}
以上MyThread為新執行緒所要執行的function
裡面可以傳入一個參數 通常可以傳入一個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();
}
以上m_thread為執行緒開啟時 就已經保留起來的指標
可以用來對執行緒做操作


最後 如果我們要做同步的動作 希望知道何時執行緒執行完成
以下範例將會一直等到執行緒執行結束 才會return
void CMyDlg::WaitThreadTerminate()
{
  ::WaitForSingleObject(m_thread,INFINITE);
}


以上為對執行緒的基本操作
arrow
arrow
    全站熱搜

    天才R 發表在 痞客邦 留言(0) 人氣()