[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)

[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)

ID:11249211

大?。?7.00 KB

頁數(shù):10頁

時(shí)間:2018-07-11

[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)_第1頁
[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)_第2頁
[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)_第3頁
[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)_第4頁
[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)_第5頁
資源描述:

《[delphi]多線程編程(10)(11)多線程同步之 mutex (互斥對象)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、原理分析:互斥對象是系統(tǒng)內(nèi)核對象,各線程都可以擁有它,誰擁有誰就能執(zhí)行;執(zhí)行完畢,用ReleaseMutex函數(shù)釋放擁有權(quán),以讓其他等待的線程使用.其他線程可用WaitForSingleObject函數(shù)排隊(duì)等候(等候也可以理解為排隊(duì)申請).使用過程:varhMutex:THandle;{應(yīng)該先聲明一個(gè)全局的互斥句柄}CreateMutex{建立一個(gè)互斥對象}WaitForSingleObject{用等待函數(shù)排隊(duì)等候}ReleaseMutex{釋放擁有權(quán)}CloseHandle{最后釋放互斥對象}ReleaseMutex、CloseHandle的

2、參數(shù)都是CreateMutex返回的句柄,關(guān)鍵是CreateMutex函數(shù):functionCreateMutex(lpMutexAttributes:PSecurityAttributes;bInitialOwner:BOOL;{是否讓創(chuàng)建者(此例中是主線程)擁有該互斥對象}lpName:PWideChar{可以給此互斥對象取個(gè)名字,如果不要名字可賦值為nil}):THandle;{1、第一個(gè)參數(shù)前面說過.2、第二個(gè)參數(shù)在這里一定要是False,如果讓主線程擁有互斥,從理論上講,得等程序退出后其他線程才有機(jī)會(huì);取值False時(shí),第一個(gè)執(zhí)行的線

3、程將會(huì)最先擁有互斥對象,一旦擁有其他線程就得先等等.3、第三個(gè)參數(shù),如果給個(gè)名字,函數(shù)將從系統(tǒng)中尋找是否有重名的互斥對象,如果有則返回同名對象的存在的句柄;如果賦值為nil將直接創(chuàng)建一個(gè)新的互斥對象;下個(gè)例子將會(huì)有名字.}本例效果圖:代碼文件:unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typeTForm1=class(TForm)Button1:TButton;procedu

4、reButton1Click(Sender:TObject);procedureFormCreate(Sender:TObject);procedureFormDestroy(Sender:TObject);end;varForm1:TForm1;implementation{$R*.dfm}varf:Integer;{用這個(gè)變量協(xié)調(diào)一下各線程輸出的位置}hMutex:THandle;{互斥對象的句柄}functionMyThreadFun(p:Pointer):DWORD;stdcall;vari,y:Integer;beginInc(f);

5、y:=20*f;fori:=0to50000dobeginifWaitForSingleObject(hMutex,INFINITE)=WAIT_OBJECT_0thenbeginForm1.Canvas.Lock;Form1.Canvas.TextOut(20,y,IntToStr(i));Form1.Canvas.Unlock;Sleep(0);{稍稍耽擱一點(diǎn),不然有時(shí)Canvas會(huì)協(xié)調(diào)不過來}ReleaseMutex(hMutex);end;end;Result:=0;end;procedureTForm1.Button1Click(Se

6、nder:TObject);varThreadID:DWORD;beginRepaint;f:=0;CreateThread(nil,0,@MyThreadFun,nil,0,ThreadID);CreateThread(nil,0,@MyThreadFun,nil,0,ThreadID);CreateThread(nil,0,@MyThreadFun,nil,0,ThreadID);CreateThread(nil,0,@MyThreadFun,nil,0,ThreadID);CreateThread(nil,0,@MyThreadFun,n

7、il,0,ThreadID);end;procedureTForm1.FormCreate(Sender:TObject);beginhMutex:=CreateMutex(nil,False,nil);end;procedureTForm1.FormDestroy(Sender:TObject);beginCloseHandle(hMutex);end;end.窗體文件:objectForm1:TForm1Left=0Top=0Caption='Form1'ClientHeight=140ClientWidth=192Color=clBtnF

8、aceFont.Charset=DEFAULT_CHARSETFont.Color=clWindowTextFont.Height=-11Font.N

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。