建立線程並傳遞參數--AfxBeginThread

來源:互聯網
上載者:User

From: http://baike.baidu.com/view/994702.html?fromTaglist

CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc,   

LPVOID pParam,   

int nPriority = THREAD_PRIORITY_NORMAL,   

UINT nStackSize = 0,   

DWORD dwCreateFlags = 0,   

LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL   );//用於建立工作者線程   

傳回值: 一個指向新線程的線程對象的指標   

pfnThreadProc : 線程的入口函數,聲明一定要如下: UINT MyThreadFunction( LPVOID pParam );   

pParam : 傳遞入線程的參數,注意它的類型為:LPVOID,所以我們可以傳遞一個結構體入線程.   

nPriority : 線程的優先順序,一般設定為 0 .讓它和主線程具有共同的優先順序.   

nStackSize : 指定新建立的線程的棧的大小.如果為 0,新建立的線程具有和主線程一樣的大小的棧   

dwCreateFlags : 指定建立線程以後,線程有怎麼樣的標誌.可以指定兩個值:   

CREATE_SUSPENDED : 線程建立以後,會處於掛起狀態,直到調用:ResumeThread   0 : 建立線程後就開始運行.   

lpSecurityAttrs : 指向一個 SECURITY_ATTRIBUTES 的結構體,用它來標誌新建立線程的安全性.如果為 NULL ,   

那麼新建立的線程就具有和主線程一樣的安全性.   

如果要線上程內結束線程,可以線上程內調用 AfxEndThread.   

結束線程的兩種方式   

當你在後台用線程來列印一些圖形時.有時在列印一部分後,你希望可以停下來,那麼此如何讓線程停止呢.

要結束線程的兩種方式

  1 : 這是最簡單的方式,也就是讓線程函數執行完成,此時線程正常結束.它會返回一個值,一般0是成功結束,   

當然你可以定義自己的認為合適的值來代表線程成功執行.線上程內調用AfxEndThread將會直接結束線程,此時線   程的一切資源都會被回收.   

2 : 如果你想讓另一個線程B來結束線程A,那麼,你就需要在這兩個線程中傳遞資訊.   

不管是工作者線程還是介面線程,如果你想線上程結束後得到它的結果,那麼你可以調用:

   ::GetExitCodeThread函數 CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc,

LPVOID pParam,

  int nPriority = THREAD_PRIORITY_NORMAL,

  UINT nStackSize = 0,

  DWORD dwCreateFlags = 0,

  LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL

  );//用於建立工作者線程

  傳回值: 一個指向新線程的線程對象的指標

  pfnThreadProc : 線程的入口函數,聲明一定要如下: UINT MyThreadFunction( LPVOID pParam );

  pParam : 傳遞入線程的參數,注意它的類型為:LPVOID,所以我們可以傳遞一個結構體入線程.

  nPriority : 線程的優先順序,一般設定為 0 .讓它和主線程具有共同的優先順序.

  nStackSize : 指定新建立的線程的棧的大小.如果為 0,新建立的線程具有和主線程一樣的大小的棧

  dwCreateFlags : 指定建立線程以後,線程有怎麼樣的標誌.可以指定兩個值:

  CREATE_SUSPENDED : 線程建立以後,會處於掛起狀態,直到調用:ResumeThread

  0 : 建立線程後就開始運行.

  lpSecurityAttrs : 指向一個 SECURITY_ATTRIBUTES 的結構體,用它來標誌新建立線程的安全性.如果為 NULL ,

  那麼新建立的線程就具有和主線程一樣的安全性.

  如果要線上程內結束線程,可以線上程內調用 AfxEndThread.

  結束線程的兩種方式

  當你在後台用線程來列印一些圖形時.有時在列印一部分後,你希望可以停下來,那麼此如何讓線程停止呢. 

 

註:

  線程函數只能接受一個參數,所以在實際應用中,如果要傳遞多個參數的話,必須對多個參數進行封裝(封閉到結構體或類)。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.