我建立了一个最简单的例子想了解线程的运行情况,发现结果cpu占用为100%,请问为什么,我的例子是新建立一个form1在上边有个按扭button1,然后建立一个线程test,
在它的excute里边写上如下代码
   while not Terminated do
   begin
      ListenRt1;         // Synchronize(
   end;
listenrt1 为自定义的空的函数。
在form1的button的click事件里边写上代码(test为我新建的那个线程)
   rt1 := test.Create(False);
当我点击按纽以后,cpu的占用率为100%,那是不是表明如果建立一个与时间同步的线程,譬如监听线程,是不是cpu都要占用100%?请高手解释一下,如果我不希望是100%,该如何去做。

解决方案 »

  1.   

    加一个Sleep(0)即可,老问题了。while not Terminated do
       begin
          ListenRt1;
          Sleep(0);
       end;
      

  2.   

    sleep就是让当前线程暂时让出cpu的控制权
      

  3.   

    监听一般是来自网络的请求吧?这样的话通过调用底层的API如Socket,这样既不会错过请求,又能不过度占用CPU,不知道对不对?
      

  4.   

    sleep(0)能解决问题吗?它无非是脱了衣服,上床躺下,然后马上起来,穿衣服,下床,然后该干什么还是干什么。不知道对不对?
      

  5.   

    1、根据硬件特点取最佳查询(监听)周期;
    2、利用多媒体定时器或其他手段产生脉冲事情;
    3、线程中的主程序采用该脉冲时间驱动。
    (ps. 如果硬件本身能提供驱动信号就更好了。)这样做的好处是充分利用了WaitForSingleObject函数的占用CPU时间少的特点。
      

  6.   

    这两个方法行不行(粗略):
    1.开辟一个请求缓冲区,请求源把它的每一个请求放于缓冲区内,服务进程周期性地查询缓冲区中的请求,有则处理之,然后sleep(SLEETTIME),睡民时间根据请求频率而定。
    2.开辟一个请求缓冲区,请求源一旦有请求,首先把请放于缓冲区,然后发送一个消息给服务进程(类似于中断)。如果请求的信号信息不大,则可以存储于消息的存储空间中,从而不用另外开辟缓冲区缓存请求。
      

  7.   

    根据需要,Sleep一定的时间
    不要使Sleep(0),但每次都Sleep也不行,程序会失去很多工作时间的,所以要根据应用来定的http://lysoft.7u7.net