我在程序中有两个线程,一个是读串口线程,一个是写串口线程,在写串口线程中是一个望串口写数据的死循环,但是占用CPU时间太多,在启动其他进程时经常出现系统呆滞现象。
  这是什么原因?    会是什么原因让线程占用大量的CPU时间?

解决方案 »

  1.   

    如果大量嵌套使用Try...Except的话,有可能会出现这种现象。
      

  2.   

    可能是由于式循环的原因造成的,循环很占cpu
      

  3.   

    “写串口线程中是一个望串口写数据的死循环,但是占用CPU时间太多”你不可能一直在往串口写数据吧,所以你需要在循环里,不写数据时(就是空闲时),调用Sleep就可以了。比如:
    if <有数据写> then
       往串口写程序
    else
       Sleep(20); //这样就不会大量占用CPU时间了
      

  4.   

    如果连续的写数据到串口中那么串口的输出outbuffsize的大小能满足吗?这样还没等串口发送出去你写的数据就让你写得下一个数据写入而删掉了上一个数据,所以你必须等待或者使得线程处于休眠状态(sleep(i:integer))。
       这样你的程序就不但保证了不死机,而且保证了数据传输的不丢失。
       我也是正在开发一个关于串口的线程,同样遇到了问题不知道能和你交流不?
       请发端消息给我!
      

  5.   

    在大的循环时加入
    Sleep(0);
    那怕你将参数设为0系统也会将CPU分出来来给其它程序用的,
    所以
    你的程序将会大大减少CPU的占用的,
    呵呵,不过这不是太正宗的做法,
    但是也能用了,
    :》
      

  6.   

    拜托,先看看spcomm的源码吧,读、写数据都是利用事件来控制的,空闲时就等待,直到有事件触发,死循环绝对是吃力不讨好的事。