问个线程里面有while(TRUE)循环的问题。
我在用delphi写IOCP程序的时候,在工作者线程函数里面我是这么写的
function ServerWorkerThread(CompletionPortID:Pointer):Integer;stdcall;
begin
while(TRUE) do
begin
GetQueuedCompletionStatus().............
........
....
end;
end;
这个时候运行程序导致程序占用掉所有的CPU,CPU使用率达到100%;
如果我在while(TRUE)循环体里面加个sleep(2),如下:
while(TRUE) do
begin
GetQueuedCompletionStatus().............
........
....
sleep(2);
end;
则CPU就正常了;可是这样就是让工作者线程sleep一会儿,应当会影响到服务器的执行效率的。
应当不是我的程序问题,我在写其他程序的时候,如果是用到线程,且里面有这种while(TRUE)的时候,总是要sleep(2),才不会导致CPU %。
不知道为什么?
难道是delphi 7的问题??我看很多用VC写的IOCP的例子里面,都是直接while(TRUE),没有sleep的,他们的CPU都很正常啊。