beginthreadex和CreateThread區別

來源:互聯網
上載者:User

 

線程對於初學者還說可能覺得很高深,這可以理解。對於某些有經驗的程式員來說,可能覺得又太簡單,我覺得如果認為線程很簡單的人,都是沒有理解線程,線程裡面涉及的東西太多,包括記憶體,初始化,線程同步等。我打算以QA的形式來寫這篇文章。

       Q:為什麼書上說要以_beginthreadex來替代CreateThread?

A:好了,一直用API CreateThread來建立線程的同志們要注意了,你可能會說我一直用這個API來建立線程,工作剛剛的,一點問題都沒有。如果真是這樣的話,我只能說是你運氣太好了。在_beginthreadex的內部,它調用了CreateThread來建立線程,Windows始終用CreateThread來建立線程。在調用CreateThread之前,beginthreadex它做了很多初始化的工作,所以它比CreateThread建立的線程更加安全。

       Q:為什麼要用兩個相同功能的函數來對待單線程和多線程式程式呢?

A:這裡就有一定的曆史原因了,標準C語言的庫在是1970年左右發明的,而在那時候,線程的概念尚未出現在任何一個作業系統上。但是,線程畢竟是出現了,讓我們來看看下面這個例子,來說明以前的CRT為什麼不支援多線程:

BOOL fFailure = (system("NOTEPAD.EXE README.TXT") == -1);        if (fFailure)       {               switch (errno)              {              case E2BIG:                     // Argument list or environment too big                      break;               case ENOENT:                      // Command interpreter cannot be found                      break;               case ENOEXEC:                      // Command interpreter has bad format                      break;               case ENOMEM:                      // Insufficient memory to run command                      break;      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.