WIndows編程之線程池的使用

來源:互聯網
上載者:User

標籤:資訊   建立線程   為什麼   ant   api   i++   程式開發   word   手動   

不得不說,做C++伺服器程式開發,要是不理解線程池,不懂線程池,做C++伺服器端的程式就沒有任何意義。特別就是上次我因為理解錯了線程池而做錯了一件事,而被指導人批了一頓,至今記憶猶新,所以趁著周末學了下線程池的使用,小有成績。

 

先看一種比較簡單的線程池的實現。

 1 #include <windows.h> 2 #include <string> 3 #include <iostream> 4  5 using namespace std; 6  7 #define BEGINTHREAD(Fun,Param)  CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Fun,Param,0,NULL); 8  9 DWORD WINAPI ThreadProc(LPVOID lpParameter);10 11 int main()12 {13 14     string words[10] = { "I am a gay.....", "I am a gay, too", "Let us do something exceting", "ah, Do you want to do it in the forest or in the bed?", "neither, I want to do it on the street. haha",15                         "I heard you like music.", "Yeah, Just like the light music.", "For example...", "bosty music and so on", "ah, you mean that is the light music...." };16 17     for (int i = 0; i < 10; i++)18     {19         //下面的代碼示範了,使用CreateThread和QueueUserWorkItem,實際效果20         //是一樣的,當然線程不多的情況下如此,如果線程很多時一定要使用QueueUserWorkItem21         QueueUserWorkItem(ThreadProc, (PVOID)&words, WT_EXECUTELONGFUNCTION);22 23         //顯示使用CreateThread來建立多個線程的效果24         //BEGINTHREAD(ThreadProc, (LPVOID)&words[i]);25     }26 27     while (true);28 29     return 0;30 }31 32 //該函數可以由CreateThread的線程啟動,也可以使用QueueUserWorkItem線程池中的線程啟動33 DWORD WINAPI ThreadProc(LPVOID lpParameter) {34     while (true)35     {36         std::string word = *(std::string*)lpParameter;37         std::cout << "線程[ID:" << GetCurrentThreadId() << "]說:" << word << std::endl;38         Sleep(5 * 1000);39     }40     return 0;41 }

這裡我們沒有使用到任何線程池的資訊,就可以直接使用線程池了,因為我們使用的方法裡頭預設給我們建立了一個線程池,但是在實際伺服器的開發中,我們必須設定線程池的大小,必須自訂線程池的屬性,就必須設定線程池的資訊,這時就需要我們手動調用來建立線程池。

 

運行:

從這張圖片裡面也可以看出線程池裡面執行的情況與我們自訂多線程還是有很大區別的,多線程裡面的輸出語句是不會被打斷的,但是再看看我們的程式,連輸出語句也被打斷了。(具體多線程裡面的輸出語句為什麼沒有被打斷,目前我也不清楚,按理是應該被打斷的)

 

未完,待續。。。。

WIndows編程之線程池的使用

相關文章

聯繫我們

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