多線程編程 之 入門篇,多線程編程入門篇

來源:互聯網
上載者:User

多線程編程 之 入門篇,多線程編程入門篇

<pre name="code" class="cpp">自己第一次涉及c語言的多線程編程,實屬入門瞭解層級的;之前只做過java的Runnable的多線程編程。本次我們可以把螢幕看成是一個資源,這個資源被兩個線程所共用,
#include <iostream>#include <windows.h>using namespace std;DWORD WINAPI Fun(LPVOID lpParamter){      while(1)      {          cout<<"Fun display!"<<endl;          Sleep(1000);// 1000 表示一秒      }}int main(){    HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);    CloseHandle(hThread);    while(1)    {        cout<<"main display!"<<endl;        Sleep(2000);    }    return 0;}// 出現連續多個空行或不換行問題我們可以把螢幕看成是一個資源,這個資源被兩個線程所共用,加入當Fun函數輸出了Fun display!後,//將要輸出endl(也就是清空緩衝區並換行,在這裡我們可以不用理解什麼事緩衝區),但此時main函數//確得到了啟動並執行機會,此時Fun函數還沒有來得及輸出換行就把CPU讓給了main函數,而這時main函數//就直接在Fun display!後輸出main display!
// 解決方案一:#include <iostream>#include <windows.h>using namespace std;DWORD WINAPI Fun(LPVOID lpParamter){    while(true)    {        cout << "Fun display!\n";        Sleep(1000);    }}int main(){    HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);    CloseHandle(hThread);    while(true)    {        cout << "Main display!\n";        Sleep(2000);    }    return 0;}
// 解決方案二:實現交替運行,這次才是從根本上解決了問題,實現了多線程共用資源#include <iostream>#include <windows.h>using namespace std;HANDLE hMutex;DWORD WINAPI Fun(LPVOID lpParamter){    while(true)    {        WaitForSingleObject(hMutex, INFINITE);        cout << "Fun display!" << endl;        Sleep(1000);        ReleaseMutex(hMutex);    }}int main(){    HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);    hMutex = CreateMutex(NULL, FALSE, "aa");    cout << hThread << "  " << hMutex << endl;    CloseHandle(hThread);    while(true)    {        WaitForSingleObject(hMutex, INFINITE);        cout<<"main display!!!"<<endl;        Sleep(2000);        ReleaseMutex(hMutex);    }    return 0;}
/*
1 CreateThread 函數 null, 0, fun, null, 0, null
HANDLE CreateThread(
LPSECURITY_ATTRIBUTESlpThreadAttributes,//安全執行緒屬性
DWORDdwStackSize,//堆棧大小
LPTHREAD_START_ROUTINElpStartAddress,//線程函數
LPVOIDlpParameter,//線程參數
DWORDdwCreationFlags,//線程建立屬性
LPDWORDlpThreadId//線程ID
);
2 HANDLE (控制代碼):不是指標勝似指標,是一個進程的唯一索引
HANDLE(控制代碼)是Windows作業系統中的一個概念。在Windows程式中,有各種各樣的資源(視窗、表徵圖、游標等),系統在建立這些資源時會為它們分配記憶體,並返回標示這些資源的標示號,即控制代碼。控制代碼指的是
一個核心對象在某一個進程中的唯一索引,而不是指標。由於地址空間的限制,控制代碼所標識的內容
對進程是不可見的,只能由作業系統通過進程控制代碼列表來進行維護。控制代碼列表:每個進程都要建立一個
控制代碼列表,這些控制代碼指向各種系統資源,比如訊號量,線程,和檔案等,進程中的所有線程都可以訪問
這些資源。
3 DWORD WINAPI 的解釋:WINAPI是呼叫慣例,WINAPI即__stdcall,DWORD 32位系統
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
);
4 建立一個獨佔資源,parameter: null,false,"resource name"
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // SD
BOOL bInitialOwner, // initial owner
LPCTSTR lpName // object name
);
第一個參數沒使用,可設為NULL,第二個指定該資源初始是否歸屬建立它的進程,第三個指定資源的名稱。
如:HANDLE hMutex = CreateMutex(NULL,TRUE,"screen");
這條語句創造了一個名為screen並且歸屬於建立它的進程的資源
5 用於釋放一個獨佔資源:
BOOL ReleaseMutex(
HANDLE hMutex // handle to mutex
);
進程一旦釋放該資源,該資源就不再屬於它了,如果還要用到,需要重新申請得到該資源。

6 申請資源的函數: 第一個參數指定所申請的資源的控制代碼,第二個參數一般指定為INFINITE
DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object
DWORD dwMilliseconds // time-out interval
);
表示如果沒有申請到資源就一直等待該資源,如果指定為0,表示一旦得不到資源就返回,也可以具體地指定等待多久才返回,單位是千分之一秒。
*/

多線程編程的入門資料

多線程編程知識C++的很小一部分,沒有專門一本書講的。。。。
 
我想學習 C++多線程編程,問各位大哥大姐什教材比較好?

先,C++肯定要好了。

C語言程式設計
book.jqcq.com/product/472414.html
語言是國內外廣泛使用的電腦語言,是電腦應用人員應掌握的一種程式設計工具。本書全面系統地介紹了C語言編程技術及其相關理論,是一本能使讀者全面掌握c語言編程技術的好教程。根據需要,作者除了深入淺出地介紹了C語言的傳統編程方法,還別具匠心地介紹了c語言的繪圖功能和一些應用開發執行個體。本書內容新穎、結構合 ...

C++編程風格
book.jqcq.com/product/620299.html
編程相關的內容,例如增加代碼的可讀性、可維護性、可擴充性以及執行效率等的方法。本書的範例程式碼都是從實際程式中抽取出來的,融人了作者的實際開發經驗。講解如何正確地編寫代碼以及避開一些常見的誤區和陷阱,並給出了許多實用的編程規則,可快速提升讀者的C++編程功力。本書描述平實,樣本豐富,適合有一定編程? ...

C++編程思想第2卷:實用編程技術
book.jqcq.com/product/413352.html
編程技術和最佳的實踐方法,深入探究了異常處理方法和異常安全設計;介紹C++的字串、輸入輸出資料流、STL演算法、容器和模板的現代用法,包括模板元編程;解釋多重繼承問題的痛點,展示RTTI的實際使用,描述了典型的設計模式及其實現,特別介紹被認為是標準C++下一版特徵之一的多執行緒編程技術,並提供了最新的研究成果? ...
 

聯繫我們

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