多线程串口读写

jacky_zuo 2007-07-06 10:04:24
我在做一个读写串口的程序,为了防止过多占用CPU,我就另开了一个线程专门读写串口,通常情况下,另一端是不断地发送设备状态(9个字符),如果这端检查到文件则停止发送设备状态而发送文件,文件的发送是一帧72个字符。两者通过起始字符区别,代码如下:

UINT CommProc(LVOID pParam)
{
char ch;

DWORD dRes;

while ( 1 )
{
dRes = WaitForSingleObject(g_hExit, 10);
switch ( dRes )
{
case WAIT_OBJECT_0:
return 0;
default:
break;
}

// 读取一个字符
ch = sio_getch(g_nPort);
if ( ch < 0 ) continue;


switch ( ch )
{
case 1:
读取8个字符,并发送消息在主窗体中显示;
break;
case 2:
接收文件;
break;
}
}

}



整个的循环大概就是这样,在我的计算机上运行倒是正常,换一台计算机竟然CPU的占用率忽高忽低,有时候是0,有时侯是100%,不知道怎么回事?
...全文
272 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacky_zuo 2007-07-18
  • 打赏
  • 举报
回复
哦,不过应该有办法保证程序的正常运行才是啊
wanglovec 2007-07-16
  • 打赏
  • 举报
回复
这个不好说, 有很多情况导致这个问题
jacky_zuo 2007-07-13
  • 打赏
  • 举报
回复
不是吧,难道就没有人知道
wz 2007-07-13
  • 打赏
  • 举报
回复
mark
jacky_zuo 2007-07-10
  • 打赏
  • 举报
回复
是总有信号,可是它不是一直是100%,而是有时高有时低
FFSB 2007-07-06
  • 打赏
  • 举报
回复
如果g_hExit总是有信号则程序等价于
while ( 1 )
{
ch = sio_getch(g_nPort);
} //占cpu100%是应当的!
jacky_zuo 2007-07-06
  • 打赏
  • 举报
回复
不是,后面的代码可以执行,而且文件传输都可以。
cczlp 2007-07-06
  • 打赏
  • 举报
回复
switch ( dRes )
{
case WAIT_OBJECT_0:
return 0;
default:
break;
}
===============================
后面代码能执行不到

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧