大家帮忙看看,不会即使显示串口缓冲数据

 1 // Comm.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include <iostream>
6 #include <Windows.h>
7 using namespace std;
8
9 int _tmain(int argc, _TCHAR* argv[])
10 {
11 HANDLE hCom;
12 char lpInBuffer[100];
13 DWORD dwBytesMaxRead=100,dwBytesOfRead;
14 static COMSTAT ComStat;
15 DWORD dwErrorFlags;
16 BOOL bReadStat;
17 BOOL isOpened;
18 DWORD errorMessage;
19 OVERLAPPED m_osRead;
20 memset(&m_osRead,0,sizeof(OVERLAPPED));
21 m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
22 dwBytesOfRead=min(dwBytesMaxRead,(DWORD)ComStat.cbInQue);
23 //打开串口
24 hCom=CreateFile(_T("COM2"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
25 if(hCom==INVALID_HANDLE_VALUE)
26 {
27 std::cout<<"open com port fail!"<<std::endl;
28 }
29 else
30 {
31 isOpened=TRUE;
32 std::cout<<"open com successful"<<'\n'<<"now listen....."<<std::endl;
33 }
34
35
36 while(isOpened)
37 {
38 DWORD dwEvtMask=0;
39 SetCommMask(hCom,EV_RXCHAR|EV_TXEMPTY);
40 WaitCommEvent(hCom,&dwEvtMask,&m_osRead);
41 if((dwEvtMask&EV_RXCHAR)==EV_RXCHAR)
42 {
43 ClearCommError(hCom,&dwErrorFlags,&ComStat);
44 if(ComStat.cbInQue>0)
45 {
46
47 if(!ReadFile(hCom,lpInBuffer,dwBytesMaxRead,&dwBytesOfRead,&m_osRead))
48 {
49 std::cout<<"read com port fail!"<<std::endl;
50 errorMessage=GetLastError();
51 std::cout<<errorMessage;
52 return 1;
53 }
54 else
55 {
56 errorMessage=GetLastError();
57 std::cout<<errorMessage;
58 lpInBuffer[dwBytesOfRead]='\0';//结束字符串;
59 std::cout<<lpInBuffer<<std::endl;
60 continue;
61 }
62 }
63 else
64 std::cout<<"no data\n"<<std::endl;
65
66
67 }
68 PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
69 system("pause");
70 return 0;
71 }
72
73 }

 

posted @ 2012-02-23 22:14  soderman  阅读(261)  评论(0编辑  收藏  举报