现在要用串口进行大量数据处理 ! 读写数据量都比较大!
主要是写数据!
我先做了一个写的单元功能函数 SendMsg(),实现写一条数据包! 但当我要写1000条的时候! 就不的不考虑程序的运行效率和用户的感受了!
所以我创建了一个线程,然后在线程里面发送消息! 在消息的响应函数中进行 调用 SendMsg,目的是在发送 大量数据的时候,不影响 软件的其他功能的使用! 我现在可以正确写入 ! 但问题是 ,在发送的时候, 软件会卡死, 不知道有什么办法解决吗 ! 类似于 后台运行吧
谢谢
主要是写数据!
我先做了一个写的单元功能函数 SendMsg(),实现写一条数据包! 但当我要写1000条的时候! 就不的不考虑程序的运行效率和用户的感受了!
所以我创建了一个线程,然后在线程里面发送消息! 在消息的响应函数中进行 调用 SendMsg,目的是在发送 大量数据的时候,不影响 软件的其他功能的使用! 我现在可以正确写入 ! 但问题是 ,在发送的时候, 软件会卡死, 不知道有什么办法解决吗 ! 类似于 后台运行吧
谢谢
建议用postmsg这样的话,处理方是否处理完,你发送方就不用管了!
LZ的思路
工作线程只发消息(SendMessage到主窗口),主界面线程在消息的响应函数中调用SendMsg,
说到底还是界面线程在处理数据...既然开了工作线程,那就应将SendMsg放到工作线程
直接在你新开的线程里面调用SendMsg吧
所以我现在 准备采用:
发送MSG一个线程A,读结果一个线程B, 在A中开启线程B,在A中等待B返回结果后A再返回! 这样一条信息 从发送到返回结果应该是可以顺利 完成的!
先试试看
个人建议:
一、分别使用单独的线程进行数据的发送和处理
二、如果需要连续不断的发送大量数据的话,需要控制数据的发送频率,可以考虑每发多少条数据就睡眠等待一段时间,这样才不至于CPU一直都被串口的处理线程所占用;
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;
}想实现在这个线程中 访问 框架类中的一个变量! 但是会在红色部分报错! 不知道是为什么!
期待坛友解答!谢谢
用pMainFrame这个有问题,如果是CABCDlg的变量就不会有问题.