初接触线程。
for i := 0 to 100 do
begin
 while 当前线程数 >= 5 do
 begin end;
 新建一个新的线程
end;
我是想实现在一个循环里面新建不超过5个线程来执行操作,当线程数>=5时就等待,直到<5时,再新建一个新的线程,不知道这样写有没有写错,“当前线程数”是用什么函数取得?如果上面写的不对,请问应该怎样写?谢谢。

解决方案 »

  1.   


    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;