现在要用串口进行大量数据处理 ! 读写数据量都比较大! 
  主要是写数据! 
我先做了一个写的单元功能函数 SendMsg(),实现写一条数据包!  但当我要写1000条的时候! 就不的不考虑程序的运行效率和用户的感受了!
所以我创建了一个线程,然后在线程里面发送消息!  在消息的响应函数中进行 调用 SendMsg,目的是在发送 大量数据的时候,不影响 软件的其他功能的使用!  我现在可以正确写入  !     但问题是 ,在发送的时候, 软件会卡死, 不知道有什么办法解决吗 ! 类似于 后台运行吧
谢谢

解决方案 »

  1.   

    应该是SendMsg的时候,发的太多,而处理程序还在一直慢慢的处理,估计来不及了!这样的话,你SendMsg的线程,就不能继续执行了,对吧
    建议用postmsg这样的话,处理方是否处理完,你发送方就不用管了!
      

  2.   

    SendMsg 是我写的一个发送数据的函数!  不是发送消息的!(SendMessage)   我在线程里面是用的PostMessage
      

  3.   


    LZ的思路
    工作线程只发消息(SendMessage到主窗口),主界面线程在消息的响应函数中调用SendMsg,
    说到底还是界面线程在处理数据...既然开了工作线程,那就应将SendMsg放到工作线程
      

  4.   

    楼主还是在用界面线程在发送啊,所以界面无法刷新,就会卡住了。
    直接在你新开的线程里面调用SendMsg吧
      

  5.   

    感谢各位的回复!因为发送的结果 必须要在3、4秒后从串口返回! 
    所以我现在 准备采用: 
    发送MSG一个线程A,读结果一个线程B, 在A中开启线程B,在A中等待B返回结果后A再返回! 这样一条信息 从发送到返回结果应该是可以顺利 完成的!      
       先试试看
      

  6.   

    串口处理数据是很慢的,你给它发送大量的数据的话,它肯定是一直都在处理数据,这种情况下会占用CPU,导致严重影响其它程序的运行的了,建议你不要连续的给串口发送数据,连续不断的发,串口也处理不过来,导致大量的数据在等待处理,严重的话还可能导致一些数据丢失;
    个人建议:
    一、分别使用单独的线程进行数据的发送和处理
    二、如果需要连续不断的发送大量数据的话,需要控制数据的发送频率,可以考虑每发多少条数据就睡眠等待一段时间,这样才不至于CPU一直都被串口的处理线程所占用;
      

  7.   

    创建线程,在线程中调用你的SendMsg函数。
      

  8.   

    在dialog 中创建一个线程如下:
    UINT ReadSendRstThread(LPVOID pParam)
    {
            CMainFrame* pMainFrame=(CMainFrame*)AfxGetMainWnd();
    CABCDlg *pAPSet=(CABCDlg *)pParam;

    while(pAPSet->m_bSendStart)
    {
    WaitForSingleObject(pCtlPSet->m_hReadSendRst, INFINITE);
    pMainFrame->m_nTest;

    }
    return 1;
    }想实现在这个线程中 访问 框架类中的一个变量! 但是会在红色部分报错! 不知道是为什么!
           期待坛友解答!谢谢
      

  9.   

    你传入的不是CABCDlg *pAPSet=(CABCDlg *)pParam;
    用pMainFrame这个有问题,如果是CABCDlg的变量就不会有问题.