[delphi]多线程编程多线程同步之mutex(互斥对象)

[delphi]多线程编程多线程同步之mutex(互斥对象)

ID:34419743

大小:97.00 KB

页数:10页

时间:2019-03-06

[delphi]多线程编程多线程同步之mutex(互斥对象)_第1页
[delphi]多线程编程多线程同步之mutex(互斥对象)_第2页
[delphi]多线程编程多线程同步之mutex(互斥对象)_第3页
[delphi]多线程编程多线程同步之mutex(互斥对象)_第4页
[delphi]多线程编程多线程同步之mutex(互斥对象)_第5页
资源描述:

《[delphi]多线程编程多线程同步之mutex(互斥对象)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、原理分析:互斥对象是系统内核对象,各线程都可以拥有它,谁拥有谁就能执行;执行完毕,用ReleaseMutex函数释放拥有权,以让其他等待的线程使用.其他线程可用WaitForSingleObject函数排队等候(等候也可以理解为排队申请).使用过程:varhMutex:THandle;{应该先声明一个全局的互斥句柄}CreateMutex{建立一个互斥对象}WaitForSingleObject{用等待函数排队等候}ReleaseMutex{释放拥有权}CloseHandle{最后释放互斥对象}ReleaseMutex、CloseHandle的参数都

2、是CreateMutex返回的句柄,关键是CreateMutex函数:functionCreateMutex(lpMutexAttributes:PSecurityAttributes;bInitialOwner:BOOL;{是否让创建者(此例中是主线程)拥有该互斥对象}lpName:PWideChar{可以给此互斥对象取个名字,如果不要名字可赋值为nil}):THandle;{1、第一个参数前面说过.2、第二个参数在这里一定要是False,如果让主线程拥有互斥,从理论上讲,得等程序退出后其他线程才有机会;取值False时,第一个执行的线程将会最先拥

3、有互斥对象,一旦拥有其他线程就得先等等.3、第三个参数,如果给个名字,函数将从系统中寻找是否有重名的互斥对象,如果有则返回同名对象的存在的句柄;如果赋值为nil将直接创建一个新的互斥对象;下个例子将会有名字.}本例效果图:代码文件:unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typeTForm1=class(TForm)Button1:TButton;procedureButton1

4、Click(Sender:TObject);procedureFormCreate(Sender:TObject);procedureFormDestroy(Sender:TObject);end;varForm1:TForm1;implementation{$R*.dfm}varf:Integer;{用这个变量协调一下各线程输出的位置}hMutex:THandle;{互斥对象的句柄}functionMyThreadFun(p:Pointer):DWORD;stdcall;vari,y:Integer;beginInc(f);y:=20*f;fori

5、:=0to50000dobeginifWaitForSingleObject(hMutex,INFINITE)=WAIT_OBJECT_0thenbeginForm1.Canvas.Lock;Form1.Canvas.TextOut(20,y,IntToStr(i));Form1.Canvas.Unlock;Sleep(0);{稍稍耽搁一点,不然有时Canvas会协调不过来}ReleaseMutex(hMutex);end;end;Result:=0;end;procedureTForm1.Button1Click(Sender:TObject);v

6、arThreadID: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,nil,0,ThreadID);end

7、;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=clBtnFaceFont.Charset=DEFAU

8、LT_CHARSETFont.Color=clWindowTextFont.Height=-11Font.N

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。