var
iCount: integer = 0;
iThread: integer = 0; //线程计数
THreadID: Cardinal;
CS: TRTLCriticalSection; //线程临界区
hThread:tHlandle;
function myThreaFunc(p: Pointer): DWORD; stdcall;
var
i: Integer;
begin
inc(iCount);
inc(iThread); //创建一个线程增1
EnterCriticalSection(cs);
Form1.mmo1.Lines.Add('i''m "' + inttostr(iCount) + 'th" Thread');
for i := iCount to 1000 do
Form1.mmo1.Lines.Add(IntToStr(i));
LeaveCriticalSection(Cs);
dec(iThread); //退出当前线程减1
CloseHandle(hThread);
Result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if iThread < 4 then //判断当前开启线程数
begin
hThread:=CreateThread(nil, 0, @mythreaFunc, nil, 0, THreadID);
end
else
begin
Button1.Caption := IntToStr(iThread);
Button1.Enabled := False;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(cs);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(CS);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessageFmt('%D个线程在运行', [iThread]);
end;
多线程临界区Demo
最新推荐文章于 2024-08-17 23:38:54 发布