baiyin 2015-06-02 07:31 采纳率: 0%
浏览 5055

程序运行一段时间后,界面不刷新 mfc

用vc2008做的程序,在自建的线程里,处理蓝牙虚拟串口通信的接收数据和实时显示!
发现程序跑40分钟左右后,界面变灰!但程序没死,数据通信显示正常。其他控件就没了。移动鼠标可以看到,也可以操作!感觉就是主界面不重绘了!如图:
图片说明
程序运行时看任务管理器的内存,也不大!应该不是内存泄漏的问题
找不出原因了!网上用PeekMessage的方法试了,还是没用!谁能帮忙给个解答!
这个线程机制以前用串口通信和usb虚拟串口通信都是正常的,没出现过这个问题!
线程代码如下:
//接收数据监测线程
UINT CBluetoothScaleDlg::CommThread(LPVOID pParam)
{
//线程函数

CBluetoothScaleDlg pDlg = (CBluetoothScaleDlg)pParam;

//连续稳定计数
pDlg->icount=0;
while(true)
{       
    //start-计算时间
    CTime StartTime,EndTime;
    CTimeSpan ebTime(0,0,0,0);
    StartTime=CTime::GetCurrentTime();

    //com通信
    pDlg->ReadDataAndDisplay();

    //end
    EndTime=CTime::GetCurrentTime();
    ebTime=EndTime-StartTime;          
    if(ebTime.GetSeconds()>3)//无信号判断?
    {
        pDlg->m_ReceiveData="无信号";

        pDlg->SetDlgItemText(IDC_EDIT_ReceivedData_Hex,pDlg->m_ReceiveData);
        //所有指示灯关闭
        //pDlg->m_ctrlIconLight.SetIcon(pDlg->m_hIconNo);                  
     }        

    Sleep(100);
}
return 0;

}

  • 写回答

5条回答

  • oyljerry 2015-06-02 08:11
    关注

    在对话框OnPaint中添加你的控件重绘等
    除了内存泄漏,其次查看一下进程的GDI,是否有泄漏

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办