请查看一下,我的串口读写程序及调用。如何问题请看内容,
因为我写了一个串口程序与外设备进行通讯。为何在传送时,程序就像“死机”一样,不能在上面操作(即鼠标显示为沙漏),等传送完成后,就恢复。这是不是与我没有用“辅助线程”有关系?
我的读写代码如下:
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串口读写程序
android RS232串口读写程序,内含jni程序代码,使用android studio打开编译
基于matlab GUI的串口读写程序
基于matlabGUI界面编程实现的串口数据读写工具,有良好的GUI界面,可显示读取数据的波形
用多线程实现串口读写数据以及文件的读写
适合的读者:初学用多线程实现对串口的异步操作,对线程的理解,以及对串口的读写。还有文件的读写都有最基本的使用方式。调试时,可以用串口调试助手一起结合的去学习~
C语言编写的串口读写程序源码
C语言编写的串口读写程序源码。供学习交流之用!
Linux下串口读写例程
先在命令行运行make编译,生成串口读写共享库,然后运行gcc -s -shared -fPIC test.c -lSetupSerialPort -o test.so,编译串口读写测试程序。 文件说明: SetupSerialPort.h //串口读写库头文件 SetupSerialPort.c //串口读写库实现文件 Makefile //编译串口读写共享库 test.c //调用串口读写共享库例程 还有Linux下Socket通讯开发例程及Firefox浏览器插件开发例程,有空时会一起整理出来贡献给大家


