delphi多线程编程3.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:19 大小:177KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

delphi多线程编程3.doc

delphi多线程编程3.doc

预览

免费试读已结束,剩余 9 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

delphi多线程编程3窗体文件:objectForm1:TForm1Left=0Top=0Caption='Form1'ClientHeight=140ClientWidth=192Color=clBtnFaceFont.Charset=DEFAULT_CHARSETFont.Color=clWindowTextFont.Height=-11Font.Name='Tahoma'Font.Style=[]OldCreateOrder=FalseOnCreate=FormCreatePixelsPerInch=96TextHeight=13objectButton1:TButtonLeft=109Top=107Width=75Height=25Caption='Button1'TabOrder=0OnClick=Button1ClickendobjectEdit1:TEditLeft=109Top=80Width=75Height=21TabOrder=1Text='Edit1'OnKeyPress=Edit1KeyPressendend再用SyncObjs单元下的TSemaphore类实现一次,使用方法差不多,运行效果也一样:unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typeTForm1=class(TForm)Button1:TButton;Edit1:TEdit;procedureButton1Click(Sender:TObject);procedureFormCreate(Sender:TObject);procedureFormDestroy(Sender:TObject);procedureEdit1KeyPress(Sender:TObject;varKey:Char);end;varForm1:TForm1;implementation{$R*.dfm}usesSyncObjs;varf:Integer;MySemaphore:TSemaphore;functionMyThreadFun(p:Pointer):DWORD;stdcall;vari,y:Integer;beginInc(f);y:=20*f;ifMySemaphore.WaitFor(INFINITE)=wrSignaledthenbeginfori:=0to1000dobeginForm1.Canvas.Lock;Form1.Canvas.TextOut(20,y,IntToStr(i));Form1.Canvas.Unlock;Sleep(1);end;end;MySemaphore.Release;Result:=0;end;procedureTForm1.Button1Click(Sender:TObject);varThreadID:DWORD;beginifAssigned(MySemaphore)thenMySemaphore.Free;MySemaphore:=TSemaphore.Create(nil,StrToInt(Edit1.Text),5,'');Self.Repaint;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;{让Edit只接受12345五个数}procedureTForm1.Edit1KeyPress(Sender:TObject;varKey:Char);beginifnotCharInSet(Key,['1'..'5'])thenKey:=#0;end;procedureTForm1.FormCreate(Sender:TObject);beginEdit1.Text:='1';end;procedureTForm1.FormDestroy(Sender:TObject);beginifAssigned(MySemaphore)thenMySemaphore.Free;end;end.多线程编程(13)-多线程同步之Event(事件对象)。据说Event(事件对象)是多线程最原始的同步手段,