亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

web開發(fā)桌面應(yīng)用程序 delphi開發(fā)安卓步驟( 三 )


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTMyThread = class(TThread)private{ Private declarations }protectedprocedure Execute; override;procedure Run;end;TForm1 = class(TForm)btn1: TButton;btn2: TButton;btn3: TButton;btn4: TButton;procedure btn1Click(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure btn2Click(Sender: TObject);procedure btn3Click(Sender: TObject);procedure btn4Click(Sender: TObject);procedure FormCreate(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}uses SyncObjs;varf:integer;MyEvent:TEvent;MyThread:TMyThread;{ TMyThread }procedure TMyThread.Execute;begininherited;FreeOnTerminate:=True; {線程使用完自己注銷}Run;end;procedure TMyThread.Run;vari,y:integer;beginInc(f);y:=20*f;for i := 0 to 20000 dobeginif MyEvent.WaitFor(INFINITE)=wrSignaled then{判斷事件在用沒,配合事件的啟動和暫停,對事件相關(guān)線程起統(tǒng)一控制}beginForm1.Canvas.lock;Form1.Canvas.TextOut(10,y,IntToStr(i));Form1.Canvas.Unlock;Sleep(1);end;end;end;procedure TForm1.btn1Click(Sender: TObject);beginRepaint;f:=0;if Assigned(MyEvent) then MyEvent.Free;{如果有,就先銷毀}{參數(shù)1安全設(shè)置,一般為空;參數(shù)2為True時可手動控制暫停,為Flase時對象控制一次后立即暫停參數(shù)3為True時對象建立后即可運(yùn)行,為false時對象建立后控制為暫停狀態(tài),參數(shù)4為對象名稱,用于跨進(jìn)程,不用時默認(rèn)''}MyEvent:=TEvent.Create(nil,True,True,'');{創(chuàng)建事件}end;procedure TForm1.btn2Click(Sender: TObject);varID:DWORD;beginMyThread:=TMyThread.Create(False);{創(chuàng)建線程}end;procedure TForm1.btn3Click(Sender: TObject);beginMyEvent.SetEvent;{啟動}{事件類沒有PulseEvent啟動一次后輕描談寫}end;procedure TForm1.btn4Click(Sender: TObject);beginMyEvent.ResetEvent;{暫停}end;procedure TForm1.FormCreate(Sender: TObject);beginbtn1.Caption:='創(chuàng)建事件';btn2.Caption:='創(chuàng)建線程';btn3.Caption:='啟動';btn4.Caption:='暫停';end;procedure TForm1.FormDestroy(Sender: TObject);beginMyEvent.Free;{釋放}end;end.Synchronize最后來聊聊這個 Synchronize 函數(shù),至于原因是將該線程的代碼放到主線程中運(yùn)行,并非實際意義的線程同步 。RAD Studio VCL Reference 中也有描述
Executes a method call within the main thread,Synchronize causes the call specified by AMethod() to be executed using the main thread,,thereby avoiding multi-thread conflicts 。
谷歌譯文:在主線程中執(zhí)行方法調(diào)用,同步導(dǎo)致指定的呼叫用于使用主線程執(zhí)行的可用于執(zhí)行的次數(shù),從而避免多線程沖突
另外一個原因是個人感覺它不夠靈活,比如我只需要同步核心運(yùn)算部分的代碼,其他部分并不需要同步的情況,所以我不太推薦 ??赡苁俏业淖藙莶粚Γ诳刂婆_應(yīng)用下無法使用,只能回到VCL中
//開啟控制臺的指令{$APPTYPE CONSOLE}interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;typeTSyncThread = class(TTHread)procedure Execute; override;publicprocedure Work();end;varNum: Integer = 0;varForm1: TForm1;implementation{$R *.dfm}{ TSyncThread }procedure TSyncThread.Execute;begininherited;Synchronize(Work);end;procedure TSyncThread.Work;begin// 循環(huán)的方式自增Numwhile True do beginTTHread.Sleep(100);// 當(dāng)Num的值大于10則終止線程if (Num > 10) thenExit;Writeln(TTHread.CurrentThread.ThreadID.ToString + ':' + Num.ToString);Inc(Num);end;end;procedure TForm1.Button1Click(Sender: TObject);beginTSyncThread.Create(false);end;end.至此Delphi多線程已知的同步方案結(jié)束了 。通常Delphi中會提供兩種方案一是原生API方式二是Delphi本身封裝的
這篇文章也是Delphi圖文版的最后一篇文章了,至此第一季相關(guān)的內(nèi)容全部更新完成


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: