一 建立執行緒
函式:
handle createthread(lpsecurity_attributes
lpthreadattributes,// sddworddwstacksize
,// initial stack sizelpthread_start_routinelpstartaddress
,// thread functionlpvoidlpparameter
,// thread argumentdworddwcreationflags
,// creation optionlpdwordlpthreadid
// thread identifier);
引數:
lpthreadattributes 一般為null null使用預設安全性,不可以被子執行緒繼承,否則需要定義乙個結構體將它的binherithandle成員初始化為true
dwstacksize 設定初始棧的大小,以位元組為單位,如果為0,那麼預設將使用與呼叫該函式的執行緒相同的棧空間的大小
lpstartaddress 執行緒函式的指標
lpparameter 給執行緒函式傳送的引數指標,可謂結構體指標,物件指標
lpthreadid 用於儲存新執行緒的id
返回值:
返回建立執行緒的控制代碼 handle 型別
執行緒函式寫法:
dword winapi threadproc(
lpvoidlpparameter
// thread data);
二 建立臨界物件
函式1:
handle createmutex(lpsecurity_attributes
lpmutexattributes,// sdboolbinitialowner
,// initial ownerlpctstrlpname
// object name);
引數:
lpmutexattributes 執行緒的安全性,如果是null 則執行緒不能被繼承
binitialowner 建立該執行緒的執行緒是否擁有該互斥物件
lpname 互斥物件的名字
返回值:
返回互斥物件的控制代碼 handle
函式2:
dword waitforsingleobject(handle
hhandle,// handle to objectdworddwmilliseconds
// time-out interval);
引數:
hhandle 用createmutex建立的臨界區物件的控制代碼
dwmilliseconds 定時時間間隔,單位為milliseconds(毫秒).如果指定乙個非零值,函式處於等待狀態直到hhandle標記的物件被觸發,或者時間到了。如果dwmilliseconds為0,物件沒有被觸發訊號,函式不會進入乙個等待狀態,它總是立即返回。如果dwmilliseconds為infinite,物件被觸發訊號後,函式才會返回。
呼叫後 需要呼叫bool releasemutex(handle
hmutex// handle to mutex);函式 釋放控制代碼
互斥物件 擁有乙個使用數量 和 乙個執行緒id ,和乙個計數器
在乙個執行緒中呼叫waitforsingleobject 在另乙個執行緒中releasemutex 釋放的互斥物件 不是同乙個,因為互斥物件的執行緒id表示那個想成呼叫的互斥物件
在使用互斥物件時 如果呼叫兩次waitforsingleobject 需呼叫兩次releasemutex 才可以,否子計數器為2,release一次 計數器為1,互斥物件仍為無訊號狀態
#include#includeusing namespace std;dword winapi fun1proc(lpvoid lpparameter);
dword winapi fun2proc(lpvoid lpparameter);
int ticks = 100;
handle hmutex;
void main()
{ handle handle1;
handle handle2;
handle1 = createthread(null,0,fun1proc,null,0,null);
handle2 = createthread(null,0,fun2proc,null,0,null);
closehandle(handle1);
closehandle(handle2);
hmutex = createmutex(null,false,text("tickets"));
if(hmutex)
{ if( error_already_exists == getlasterror())
{ cout<<"only one running"<0 )
cout<<"thread1 sell ticke"<0 )
cout<<"thread2 sell ticke"<
多執行緒程式設計1
一,建立執行緒和退出執行緒 在linux系統中,所有與執行緒相關的函式都是以pthread開頭的。pthread create函式用於在當前程序中加入新的執行緒。linux系統中線程的建立與unix系統存在著不同。在linux系統中,當呼叫pthread create函式來建立執行緒時,系統首先先建...
多執行緒程式設計 1
為了以後忘記以後可以再看,所以記錄下.程式開始後將有乙個主線程,即 thread.currentthread乙個簡單的示例,阻塞當前執行緒 這裡建立了2個執行緒,然後呼叫start方法啟動執行緒.修改上面程式,阻塞第1個執行緒 可以看到兩個執行緒互不影響 我想能不用執行緒就不要用,因為執行緒很複雜....
多執行緒程式設計1
管理執行緒的函式和類在 thread 中宣告,而保護共享資料的函式和類在其他標頭檔案中宣告 每個執行緒都必須有乙個初始函式,新執行緒的執行從這裡開始。對於應用程式來說,初始執行緒是main 但是對於其他執行緒,可以在std thread物件的建構函式中指定,本例中,被命名為t的std thread物...