A线程向B线程秒发100000条消息,B线程把消息写到磁盘。在B线程用个链表从尾部接收消息,另外有个循环
while(1)
{
关键是这里代码怎么写?//从链表头开始写
}我的意思是while循环不要一直空转,等有消息进入链表队列后再开始写文件,
应该用什么方法??
谢谢。

解决方案 »

  1.   

    补充:发送时间和消息数量都不确定。在程序中加了个空死循环
    while(1)
    {
    }
    测试了一下cpu 利用率高达50%,
    估计用死循环的方法不好。
    得加上个 waitsigleobject 之类的语句。
    但是每发次消息,set... 一次也不好。怎么解决?
      

  2.   

    如果数量大的话,发的线程视情况加sleep
    收不用加sleep,最好每隔一段时间写一次硬盘,不好每条写一次
      

  3.   

    定义一个接收buffer
    网络线程:
     收到条消息,
     锁定buffer
     if(buffer未满)
      把消息写到buffer
     else
       {
         解锁buffer
         sleep(2000);
         锁定buffer;
       }
     if(消息结束)
      写条结束的消息到buffer
     解锁buffer;取网络消息线程:
    while(1)
    {
      锁定buffer;
      从buffer取消息;
      if(buffer满 || 取出的消息== 结束)//缓冲满了或者消息发完了才一次性写文件
         写buffer到文件;
      解锁buffer;
      sleep(1);//防止cpu占100%
     }