问题是这样的:
1.已定义:
类CA,类CB,全局变量g_strParam, 
读串口线程函数原型:DWORD WINAPI ReadPortThread(LPVOID lpvoid); //读数据线程2.调用关系:
CA调用CB的对象,CB的对象中创建了线程函数ReadPortThread(), 线程函数会不断的检测串口,并读取数据给全局变量g_strParam, 同时,在CA的视图CAView::Draw()中用到g_strParam,并希望根据g_strParam的值的变化,在客户区显示不同的内容3、现在的问题是:
当线程函数不断改变g_strParam的值时,如何让CA的客户区都能即时的显示相应的变化内容呢?谢谢!!

解决方案 »

  1.   

    CA是一窗口类(派生于CWnd)?在ReadPortThread中侦测到g_strParam时向CA发关一个自定义消息(PostMessage),由自定义消息响应函数完成CA的客户区刷新工作。
      

  2.   

    既然是全局对象,那么OnDraw()时值直接检查就行了,不过这样响应就慢了,也可以做定时器检查,发现改变刷新,当然在ReadPortThread()向CA发消息应该是效率最高的做法,也很合理
      

  3.   

    从线程中发送一个自定义消息通知用户界面刷新
    线程中给 g_strParam 赋值后 PostMessage 或 SendMessage 一个消息到窗口
      

  4.   

    可是类CA只是主框架中的一个视图呀,主框中还有视图CDView呢?
    如何能准确的找到指向CA的句柄呢??
      

  5.   

    可以使用timer,时间短一些,检测一下g_strParam的值有没有变化
      

  6.   

    显示的问题解决来,可是又有新的问题产生了
    我是在CMainFrame中加的消息响应函数(因为多个视图都会用g_strParam),Invalidate(TRUE)来刷新,结果就是窗口不断的闪耀,怎么办是好呢??(窗口中还有其它一些可以不变的内容)
    谢谢!
      

  7.   

    从线程中发送一个自定义消息通知用户界面刷新
    线程中给 g_strParam 赋值后 PostMessage 或 SendMessage 一个消息到窗口
      

  8.   

    自己进行局部处理,不要用invalidate,不然肯定是闪烁的。