建立執行緒
在windows平台,windows api提供了對多執行緒的支援。
createthread用於建立乙個執行緒,其函式原型如下:
handle winapi createthread(
lpsecurity_attributes lpthreadattributes, //執行緒安全相關的屬性,常置為null
size_t dwstacksize, //新執行緒的初始化棧大小,可設定為0,表示和主線程棧的大小一樣, 如果不夠用會自動增長
lpthread_start_routine lpstartaddress, //執行緒函式
lpvoid lpparameter, //傳入執行緒函式的引數,不許傳遞引數時為null
dword dwcreationflage, //啟動選項,0:執行緒建立後立即執行入口函式;create_suspended:執行緒建立後會掛起等待
lpdword lpthreadid //傳出引數,用於獲得執行緒id,如果為null,則不返回執行緒id
); 其中執行緒函式的原型如下:
dword winapi threadproc(lpvoid lpparameter); //lpparameter是傳入的引數,是乙個空指標
【demo1】簡單多執行緒例項
#include
#include
using
namespace
std;
dword winapi funproc(lpvoid lpparameter);
int index=0;
void main()
dword winapi funproc(lpvoid lpparameter)
執行結果如圖所示:
執行緒同步
使用互斥量進行執行緒同步時會用到一下3個函式:
handle winapi createmutex(
lpsecurity_attributes lpmutexattributes, //執行緒安全相關屬性,常置為null
bool binitialowner, //建立mutex時的當前執行緒是否擁有mutex的所有權
lpctstr lpname //mutex的名稱
); dword winapi waitforsingleobject(
handle hhandle; //要獲取的鎖的控制代碼
dword dwmilliseconds //超時間隔,一般為infinite,表示無限等待,知道等待的物件處於非占用的狀態
); bool winapi releademutex(handle hmutex); //釋放所擁有的互斥量鎖物件,hmutex為釋放的互斥量的控制代碼
【demo2】模擬火車售票系統
#include
#include
using
namespace
std;
#define name_lire 40
dword winapi funproc(lpvoid lpparameter);
int tickets=100;
handle hmutex;
typedef
struct __thread_data
}thread_data;
void main()
}//建立執行緒
handle hthread1=createthread(null,0,funproc,&threaddata1,0,null);
handle hthread2=createthread(null,0,funproc,&threaddata2,0,null);
handle hthread3=createthread(null,0,funproc,&threaddata3,0,null);
closehandle(hthread1);
closehandle(hthread2);
closehandle(hthread3);
waitforsingleobject(hmutex,infinite);
releasemutex(hmutex);
releasemutex(hmutex);
sleep(4000);
system("pause");
}//執行緒的入口函式
dword winapi funproc(lpvoid lpparameter)
return
0;}
部分結果如下圖所示:
C 多執行緒程式設計
一 thread 基礎 程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式 方...
C 多執行緒程式設計
乙個程序通常定義為程式的乙個例項。在win32中,程序佔據4gb的位址空間。與它們在ms dos和16位windows作業系統中不同,win32程序是沒有活力的。這就是說,乙個win32程序並不執行什麼指令,它只是佔據著4gb的位址空間,此空間中有應用程式exe檔案的 和資料。exe需要的任意dll...
C 多執行緒程式設計
建立執行緒的函式 handle createthread lpsecurity attributes lpthreadattributes,使用預設安全形態,設為null,表明不可被子執行緒繼承 size t dwstacksize,初始棧大小,預設值0表示使用與呼叫該函式的執行緒相同的棧大小 lp...