我遇到的问题描述如下:
环境是,基于对话框上,两个线程,主线程用SetDlgItemText()显示四个数据,子线程从下位机用for循环取四个数据,且下位机是单片机控制的,对时序要求很高。
发现对话框上显示的数据会经常出错。
我做了验证,屏蔽主线程显示语句,用TRACE直接输出子线程取到的数据,没有错误,据此我判断由于显示方法影响了子线程的时序导致取到错误数据。几点关于在对话框上实时快速显示的探讨:
我知道的方法只有UpdateData(FALSE),不能用于实时快速显示,和以上我用的SetDlgItemText()方法,倾角大家还有其他方法吗。尤其请教那位开发过这类程序的朋友,这样的显示常规用什麽方法呢。谢谢大家。

解决方案 »

  1.   

    (1)多线程保护
        多线程同步(如同步/互斥/信号量)可以用来在通信线程和显示线程(或Timer)间进行同步。具体思想如下(以互斥为例):
        当通信线程写数据时,锁定数据访问方法。此时显示线程如果希望调用该方法读取数据将被阻塞。当通信线程写完数据后,进行解锁。
        反之,显示线程如果开始读数,则锁定互斥量。此时如果通信线程希望写数据也将被阻塞。直到显示线程读取数据结束并解锁互斥量为止。
    (2)软硬件之间的数据同步
        注意,由于你用了单片机作为下位机(不知道是板卡形式还是通过通信线路连接),因此上面讲的通信线程可能不存在(而是由驱动程序或其它方式写入数据)。如果是这样,可能要在驱动程序中或者自己的通信协议中加入数据同步的功能。
    (3)注意事项
        显示通常不需要太快。所以应当以保证实施实时性为主。
        多线程容易引起诸如死锁/数据不一致等问题。需要特别小心。