初接触线程。
for i := 0 to 100 do
begin
while 当前线程数 >= 5 do
begin end;
新建一个新的线程
end;
我是想实现在一个循环里面新建不超过5个线程来执行操作,当线程数>=5时就等待,直到<5时,再新建一个新的线程,不知道这样写有没有写错,“当前线程数”是用什么函数取得?如果上面写的不对,请问应该怎样写?谢谢。
for i := 0 to 100 do
begin
while 当前线程数 >= 5 do
begin end;
新建一个新的线程
end;
我是想实现在一个循环里面新建不超过5个线程来执行操作,当线程数>=5时就等待,直到<5时,再新建一个新的线程,不知道这样写有没有写错,“当前线程数”是用什么函数取得?如果上面写的不对,请问应该怎样写?谢谢。
var
iCount: integer = 0;
iThread: integer = 0; //线程计数
THreadID: Cardinal;
CS: TRTLCriticalSection; //线程临界区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
Result := 0;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
if iThread < 4 then //判断当前开启线程数
begin
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;