请查看一下,我的串口读写程序及调用。如何问题请看内容,
因为我写了一个串口程序与外设备进行通讯。为何在传送时,程序就像“死机”一样,不能在上面操作(即鼠标显示为沙漏),等传送完成后,就恢复。这是不是与我没有用“辅助线程”有关系?
我的读写代码如下:
DWORD TMainFace::WriteComm(char *buf,DWORD dwLength)
{
BOOL fState;
DWORD length=dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
fState=WriteFile(hCom,buf,length,&length,&m_osWrite);
if(!fState)
{
if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(hCom,&m_osWrite,&length,TRUE);//等待
}
else
length=0;
}
return length;
}
int TMainFace::ReadComm(char buf[10],DWORD dwLength)
{
BOOL fState;
DWORD length=dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
m_osRead.hEvent=CreateEvent(NULL, true, false, NULL);//必须创建有效事件
ClearCommError(hCom,&dwErrorFlags,&ComStat);
fState=ReadFile(hCom,buf,length,&length,&m_osRead);
if(!fState)
{
if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(hCom,&m_osRead,&length,TRUE);//等待
}
else
length=0;
}
return length;
}
//调用它们
char buf[10];
int rel=MainFace->ReadComm(buf,1);//请读串口内容:
if(buf[0]==0x4F)
{
char aa=0xAA;
MainFace->WriteComm(&aa,1);
return 0x4F;
}
//如何能写成“有线程”的,线程如何写,如何调用线程,我调用不成功。
我的读写代码如下:
DWORD TMainFace::WriteComm(char *buf,DWORD dwLength)
{
BOOL fState;
DWORD length=dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
fState=WriteFile(hCom,buf,length,&length,&m_osWrite);
if(!fState)
{
if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(hCom,&m_osWrite,&length,TRUE);//等待
}
else
length=0;
}
return length;
}
int TMainFace::ReadComm(char buf[10],DWORD dwLength)
{
BOOL fState;
DWORD length=dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
m_osRead.hEvent=CreateEvent(NULL, true, false, NULL);//必须创建有效事件
ClearCommError(hCom,&dwErrorFlags,&ComStat);
fState=ReadFile(hCom,buf,length,&length,&m_osRead);
if(!fState)
{
if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(hCom,&m_osRead,&length,TRUE);//等待
}
else
length=0;
}
return length;
}
//调用它们
char buf[10];
int rel=MainFace->ReadComm(buf,1);//请读串口内容:
if(buf[0]==0x4F)
{
char aa=0xAA;
MainFace->WriteComm(&aa,1);
return 0x4F;
}
//如何能写成“有线程”的,线程如何写,如何调用线程,我调用不成功。
...全文
相关推荐
android RS232串口读写程序
- 应用程序通过Java层的JNI接口调用C/C++的串口读写函数,实现数据传输。6.
基于matlab GUI的串口读写程序
**错误处理**: 由于串口通信可能遇到各种问题,如设备未连接、波特率不匹配等,因此在程序中加入错误处理机制是非常重要的。
用多线程实现串口读写数据以及文件的读写
异步操作是多线程的一个关键应用,它可以避免因为等待IO操作完成而导致的程序停滞,提升用户体验。实现串口读写数据的多线程步骤如下:1.
C语言编写的串口读写程序源码
该项目基于C++实现了Windows平台下的串口读写功能,封装了串口的打开、关闭、读取和写入操作。通过CSerialPort类配置波特率、数据位、停止位等参数,支持重叠I/O模式,可用于与串口设备进行
Linux下串口读写例程
本文详细介绍了如何使用C语言和SetupSerialPort库实现串口通信的基本操作,包括串口的打开、参数配置、数据读写以及关闭。同时,提供了编译和生成串口读写共享库及测试程序的步骤,确保数据传输的可


