串口通信中数据的分段接受

在串口通信中,数据是按接受的时间间隔来分包的(不知道是不是所有的都是这样,欢迎有知道的童鞋能留言~_~!),所以就可以根据这个原理来接受数据包并按自己的格式写入文件中。下面是具体的做法:

一、在对话框的OnInitDialog中创建接受数据的文件,并启动AutoSaveData线程

 1 CTime t = CTime::GetTickCount();
 2 CString str = t.Format(_T("%Y-%m-%d"));
 3 if(!m_rFile.Open(m_strCurPath+_T("\\")+str+_T(".txt"),CFile::modeCreate | CFile::modeWrite |CFile::modeNoTruncate)) 
 4 {
 5     AfxMessageBox( "创建记录文件失败!");
 6     m_brFileOpen = FALSE;
 7 }else{
 8     m_brFileOpen = TRUE;
 9 }
10 
11 m_Thread = AfxBeginThread(AutoSaveData,this);

 

二、线程方法实现如下

 1 UINT CSCOMMDlg::AutoSaveData(LPVOID pParam)
 2 {
 3     CSCOMMDlg* pDlg = (CSCOMMDlg*)pParam;
 4 
 5     CString str;
 6     int currentPoint = 0;
 7     while(!pDlg->m_bExitThread)
 8     {
 9         if(pDlg->sourceUnChar[0])
10         {
11             CTime t = CTime::GetCurrentTime();
12             CString sTime = t.Format("%Y-%m-%d %H:%M:%S ");
13             str = sTime + str;
14             bool check = TRUE;
15             while(check)
16             {
17                 check = FALSE;
18                 while(pDlg->sourceUnChar[currentPoint])
19                 {
20                     check = TRUE;
21                     str += pDlg->sourceUnChar[currentPoint];
22                     currentPoint++;
23                 }
24                 Sleep(20);
25             }
26             currentPoint = 0;
27             pDlg->m_countPackage = 0;
28             memset(pDlg->sourceUnChar,0,BUFFERE_LEN*sizeof(char));
29             str += _T("\r\n");
30             if (pDlg->m_brFileOpen)
31             {
32                 pDlg->m_rFile.SeekToEnd();
33                 pDlg->m_rFile.Write(str,str.GetLength());
34                 pDlg->m_rFile.Flush();
35             }else{
36                 CTime t = CTime::GetTickCount();
37                 CString str = t.Format(_T("%Y-%m-%d"));
38                 if(!pDlg->m_rFile.Open(pDlg->m_strCurPath+_T("\\")+str+_T(".txt"),CFile::modeCreate | CFile::modeWrite |CFile::modeNoTruncate)) 
39                 {
40                     AfxMessageBox( "创建记录文件失败!");
41                     pDlg->m_brFileOpen = FALSE;
42                 }else{
43                     pDlg->m_brFileOpen = TRUE;
44                 }
45             }
46             str.Empty();
47         }
48     }
49     return 0;
50 }

 

转载于:https://www.cnblogs.com/Arvin-XZL/p/4969138.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值