首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

问个关于循环里用线程的有关问题

2013-10-27 
问个关于循环里用线程的问题初接触线程。for i : 0 to 100 dobegin while 当前线程数 5 do begin end

问个关于循环里用线程的问题
初接触线程。
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;

热点排行