那个兄弟试过在delphi里用互斥元来实现多线程? 用TCriticalSession或Mutex都可以,原理和全局变量差不多吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Main;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TMainForm = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private procedure ThreadsDone(Sender: TObject); end; TFooThread = class(TThread) protected procedure Execute; override; end;var MainForm: TMainForm;implementation{$R *.DFM}const MaxSize = 128;var NextNumber: Integer = 0; DoneFlags: Integer = 0; GlobalArray: array[1..MaxSize] of Integer; hMutex: THandle = 0;function GetNextNumber: Integer;begin Result := NextNumber; Inc(NextNumber); end;procedure TFooThread.Execute;var i: Integer;begin FreeOnTerminate := True; OnTerminate := MainForm.ThreadsDone; if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then begin for i := 1 to MaxSize do begin GlobalArray[i] := GetNextNumber; Sleep(5); end; end; ReleaseMutex(hMutex);end;procedure TMainForm.ThreadsDone(Sender: TObject);var i: Integer;begin Inc(DoneFlags); if DoneFlags = 2 then begin for i := 1 to MaxSize do { fill listbox with array contents } Listbox1.Items.Add(IntToStr(GlobalArray[i])); CloseHandle(hMutex); end;end;procedure TMainForm.Button1Click(Sender: TObject);begin hMutex := CreateMutex(nil, False, nil); TFooThread.Create(False); TFooThread.Create(False);end;end. zuanfen sujie ClientDataSet1.SaveToFile 支持中文问题 那位大侠做过读心电图数据画波形? 2个简单的关于dll调用的问题 散粪啦~~~~~ 关于十进制转为16进制的问题 有关异常的问题,请朋友们看看! 高分寻求delphi经典代码,思想 外加 急!!!串口问题请各位老师帮忙!!! fast report 4.3打印方面问题 有谁能告诉我[异质查询]是怎样的?? 关于相同记录不能存在的问题
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TMainForm = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
procedure ThreadsDone(Sender: TObject);
end; TFooThread = class(TThread)
protected
procedure Execute; override;
end;var
MainForm: TMainForm;implementation{$R *.DFM}const
MaxSize = 128;var
NextNumber: Integer = 0;
DoneFlags: Integer = 0;
GlobalArray: array[1..MaxSize] of Integer;
hMutex: THandle = 0;function GetNextNumber: Integer;
begin
Result := NextNumber;
Inc(NextNumber);
end;procedure TFooThread.Execute;
var
i: Integer;
begin
FreeOnTerminate := True;
OnTerminate := MainForm.ThreadsDone;
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
begin
for i := 1 to MaxSize do
begin
GlobalArray[i] := GetNextNumber;
Sleep(5);
end;
end;
ReleaseMutex(hMutex);
end;procedure TMainForm.ThreadsDone(Sender: TObject);
var
i: Integer;
begin
Inc(DoneFlags);
if DoneFlags = 2 then
begin
for i := 1 to MaxSize do
{ fill listbox with array contents }
Listbox1.Items.Add(IntToStr(GlobalArray[i]));
CloseHandle(hMutex);
end;
end;procedure TMainForm.Button1Click(Sender: TObject);
begin
hMutex := CreateMutex(nil, False, nil);
TFooThread.Create(False);
TFooThread.Create(False);
end;end.