我在用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都很正常啊。
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都很正常啊。
解决方案 »
- 关于 TDateTime (新手)
- 散分
- fastreport的安装问题!
- 为什么设置Form最大化时(Form.windowState:=wxMaxMized),有时可见任务栏有时又全屏连任务栏也见不着,我希望任务栏出现。可以吗?
- sos(在线等待)
- ★★★★★★★RICHEDIT中插入图象,源代码公开啦★★★★★★★★★★
- 我从来没有遇到过这么S板的编译器,字体这么少,而且没一种好看一些的,连最起码的Arial都没有,没一种舒服的,大家都用什么字体啊?
- 关于用循环语句控制控件的问题,高手请进(在线等待...)
- 用Ado的variant类型变量ARecoedSet编辑某个记录该怎样定位,
- 如何在一次插入多条记录
- fastreport中报"Undeclared indentifier:'recordcount'"错误,不知该如何解决??
- 我想把一个JPG图片调出来在上面画个圆再保存,有什么控件没,VB,DELPHI都行
如果不sleep,CPU就会100%。