主 线 程:采集高速数据,处理 + 显示
工作线程:把主线程处理后的数据保存写入磁盘文件很久不做多线程了,请大家指教。
UI线程负责数据捕获处理,如何通知工作线程数据到达处理完毕(消息?事件?)?如何控制线程同步、数据共享?考虑到性能、操作性,请各位dx指点一二。

解决方案 »

  1.   

    FIFO队列?主线程入队,工作线程出队,整理、拼接、写盘。代码优化一下,基本不用加锁保护,提高性能
      

  2.   

    数据共享用个全局数组队列,CArray就可以同步用CEvent,数据写入队列中后,SetEvent(),工作线程响应后处理数组中数据。还有一个方法就是工作线程循环监测数组中有无可写数据,加上Sleep(),以防造成Cpu占用过高
      

  3.   

    补充下:线程之间如何同步相信你肯定也知道,所以我就不说了。如不清楚如何同步就google下,事件、信号灯之类的例子很多的。
      

  4.   


    多谢!我再好好学习研究下。我目前的做法是采集一个线程,主线程WHILE(1){}处理数据,内有消息泵PeekAndPump。想再开启一个线程写入文件。由于处理之后的数据比较繁多,怕线程之间传递比较繁琐。先这么做做试试看效果,如果不行再优化改进引入一个线程处理数据。显示数据还要开启一个线程???视图的更新也通过线程消息控制?是不是太那个啥了
      

  5.   

    多几个线程无所谓,要看这几个线程正在做什么。有没有都忙着。主界面线程最好是单独的,不要让他处理别的,不然界面会死。
    对于这个程序肯定占用CPU很大的,所以最好在采集或显示线程中加个SLEEP。
      

  6.   

    谢谢楼上的xd。不过我恐怕不能添加什么sleep函数了。因为如果一旦添加sleep,我的采集部分就阻塞丢失数据了。我选择UI线程内处理数据,也是怕自己对多线程的使用控制技术不过关。怕出现意外的混乱。先在CMainFrame做了再说吧。以后优化时候再变换到多线程处理。