CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

用线程实现RS232串口通信,可是资源占用好大,怎么解决?

楼主happydingdang(我要up出星星)2005-04-04 11:41:27 在 VC/MFC / 基础类 提问

系统有三个线程,主线程负责刷屏显示,一个子线程A负责接受pci总线上的图像采集信号,另一个子线程B负责监视com1,如果不开B线程,主线程的刷屏速度可以在40帧以上,可是开了B线程以后就不到20帧了。这是什么原因?A线程的数据量可是比B线程的要大的多啊,可是怎么B线程对系统的影响这么大呢?有什么更好解决串口通信的办法吗?在没有窗口面板的程序里要怎么把控件加到某一个窗口上?  
  问题点数:100、回复次数:12Top

1 楼DentistryDoctor(Data Recovery -- http://www.powerdatarecovery.com)回复于 2005-04-04 11:47:26 得分 50

串口通信线程是不是个busy   loop?  
   
  WaitCommEvent?Top

2 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-04 12:15:58 得分 5

线程中是否有很占CPU的处理Top

3 楼ericzhangali(另一个空间)回复于 2005-04-04 12:41:45 得分 5

B做了些什么Top

4 楼qrlvls( 空 气 )回复于 2005-04-04 12:53:08 得分 0

agree   to   DenstryDoctorTop

5 楼qrlvls( 空 气 )回复于 2005-04-04 12:53:44 得分 30

http://vckbase.com/code/listcode.asp?mclsid=9&sclsid=907Top

6 楼happydingdang(我要up出星星)回复于 2005-04-04 14:19:20 得分 0

B大多数时间都是waitforsingleobject,其实就是在等待commeventTop

7 楼allen7757(漫步VS新月)回复于 2005-04-04 14:45:59 得分 5

线程B占用了CPU资源,应该让主线程支配。Top

8 楼jmcooler()回复于 2005-04-04 14:47:22 得分 5

你先把A线程挂起,测试看看究竟B线程是否一直占用CPU。有可能你的B线程写的有问题,然后就一直  
  有串口事件触发,就一直不停的循环。  
  要在没有界面的程序里创建控件,一般必须创建一个窗口,而且这个窗口必须要位于具备消息循环的线程里(就是用户界面线程),如果把它放在工作线程(没有消息循环)里,那是不起作用的。  
  如果仅仅需要一个窗口来传递消息,那么不如直接用带消息循环的线程来传递消息。  
  如果非要一个窗口并放入控件,那么可以定义如下的线程函数。  
   
   
  DWORD   WINAPI   WinMsgLoopProc(   LPVOID   lpParam   )  
  {  
        MSG   msg;  
        //这里创建一个窗口,并创建其中的控件  
        while(   GetMessage(   &msg,   0,   0,   NULL   )   )     //这句也将强迫系统为本线程建立消息队列  
        {  
              TranslateMessage(   &msg   );  
              DispatchMessage(   &msg   );  
        }  
  }  
   
  //当然别忘了程序退出时,给这个线程发一个WM_QUIT消息。Top

9 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-04 14:51:12 得分 0

Sleep一下,或设置个超时Top

10 楼jmcooler()回复于 2005-04-04 14:54:56 得分 0

明白我的意思不?  
  窗口具有消息Post和响应,界面线程同样可以,而且界面线程更直接,可以就在上面的消息循环里处理消息,不象窗口,还写个消息映射。我这点是说的,你只需要窗口来传递消息。  
  因为一般的控件,必须依靠父窗口而存在,那么这种需求就必须创建一个父窗口,由于窗口和控件都是依靠消息来工作的,所以它们所处的线程必须要有消息循环。那就字节写一个这样的消息循环也是佷简单的。要不从CWinThread派生一个类,然后用AfxBeginThread(   RUNTIME_CLASS(...)   )来创建界面线程也可以。Top

11 楼happydingdang(我要up出星星)回复于 2005-04-04 15:21:07 得分 0

 
  为什么仅仅是等待的时候也会占用那么多的资源?Top

12 楼happydingdang(我要up出星星)回复于 2005-04-04 15:45:01 得分 0

等待会占用资源吗?就是waitforsingleobject这个语句。Top

相关问题

  • 关于:多线程+串口通信
  • 怎样在线程中使用串口通信?
  • 使用多线程,其中一个来负责串口通信
  • 关于多线程串口通信的问题,大家帮我看看
  • 关于使用一个线程来负责串口通信的问题
  • 串口通信
  • 串口通信
  • 200分奉上!兄弟们 帮帮我 如何实现多线程里的串口通信啊
  • pb串口通信
  • C#串口通信

关键词

  • 线程
  • 消息
  • 串口通信
  • 控件
  • 循环
  • 界面
  • 系统
  • 占用
  • 创建
  • 资源

得分解答快速导航

  • 帖主:happydingdang
  • DentistryDoctor
  • oyljerry
  • ericzhangali
  • qrlvls
  • allen7757
  • jmcooler

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo