delphi 中使用WaitForMultipleObjects等待线程执行,再执行后续代码
https://blog.csdn.net/lotusyangjun/article/details/8259100
2012年12月05日 11:19:50
阅读数:5051
unit1
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- btn1: TButton;
- mmo1: TMemo;
- procedure btn1Click(Sender: TObject);
- private
-
- public
-
- end;
-
- var
- Form1: TForm1;
-
- procedure ThreadTest;stdcall;
- implementation
-
- uses Unit2;
-
- {$R *.dfm}
-
-
- procedure ThreadTest;stdcall;
- var
- Handles:TWOHandleArray;
-
- Test:TTestThread;
- i:Integer;
- begin
- for i := 0 to 10 do
- begin
- Test := TTestThread.Create(False);
- Handles[i] := Test.Handle;
- end;
- WaitForMultipleObjects( 11, @Handles, True, INFINITE );
- Form1.mmo1.Lines.Add( '123' );
- end;
-
-
- procedure TForm1.btn1Click(Sender: TObject);
- var
- ID:Cardinal;
- begin
- CreateThread( nil, 0, @ThreadTest, nil, 0, ID );
- end;
-
-
-
- end.
unit2
- unit Unit2;
-
- interface
-
- uses
- Classes;
-
- type
- TTestThread = class(TThread)
- private
-
- protected
- procedure Execute; override;
- end;
-
- implementation
-
- uses Unit1;
-
-
- procedure TTestThread.Execute;
- begin
-
-
-
- form1.mmo1.Lines.Add( 'ok' );
-
- end;
-
- end.
程序执行效果:
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
123
界面上先打印出11个线程输出的“OK”,再输出123.