procedure TMyThread.Execute;
while not Terminated do begin
case State of
0:begin
WaitForSingleObject(hSemaphore, INFINITE);
......
State:=1;
end;
1:begin
......
State:=2;
end;
2:begin
......
State:=3;
end;
3:begin
ReleaseSemaphore(hSemaphore, 1, nil);
......
end;
4:begin
......
end;
......
end;
end;
end;procedure TMainForm.btnStartClick(Sender: TObject);
var i:integer;
begin
CloseHandle(hSemaphore);
hSemaphore := CreateSemaphore(nil,1,1, nil);
for i:=0 to 2 do begin
SetLength(MyThread,i+1);
MyThread[i]:=TMyThread.Create(True);
MyThread[i].FreeOnTerminate:=True;
MyThread[i].Resume;
end;
end;
目的:Case中0~3步同一时间只有一条线程运行。
问题:第1条线程释放信号量时2、3线程同时跳出WaitForSingleObject,望高手帮忙!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货