vcvc2010 串口编程程 长时间运行内存减少

串口编程解决方法 - VC/MFC当前位置:& &&&串口编程解决方法串口编程解决方法&&网友分享于:&&浏览:13次串口编程我写一个串口程序, & 不断地调用ReadFile()函数读取数据!如果另外一端(发送数据的)突然关机(或停止发送数据),我怎么判断呢?是不是通过什么事件或者串口状态确定?请高手指教------解决方案--------------------不断地调用ReadFile()函数读取数据!??
这样不行,最好采用独立的读线程,串口用异步重叠方式打开,设置EV_RXCHAR时间,下位机没有数据发送,只是读线程挂起,不影响主线程!
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
本帖子已过去太久远了,不再提供回复功能。VS/VC/MFC(27)
最近在调试一个大型的MFC程序的时候,需要在Cview类中申请一个double(float)array[][500]的三维数组,首先声明一点,算法比较复杂,暂时没有办法去修改算法,所以必须要申请一个这么大的三维数组空间。
(1)首先在栈中申请了一个固定数组array[][500],结果VC提示超出栈的保留空间了。这种方法OUT
(2)然后用std::vector&std::vector&std::vector&2100& & & grdarray(400,vector&vector&float& &(NY,vector&float&(500)));去申请一个三维嵌套的Vector,内存上是可以分配的,但是在进行赋值的时候不如数组方面,出现错误,这种方法也被排除。
(3)malloc去申请一个一个内存空间存储三维数组,可以运行,但是在程序运行过程中,出现内存不足的提示。
(4)new一个三维动态数组,也是可以申请那么多的内存,但是依然在运行的过程中出现内存不足的提示。
这让我很费解,一度去检查了是不是程序出现内存泄露或者是死循环,但是不幸是,没有。
& & & & 在网上进行一波搜索之后才领悟到:虽然现在电脑是Win7 64位,但是VC++6.0是从Win32的平台移植到win7 64位上的,所以归根结底,依然VC++6.0编写出来的程序依然是Win32程序,Windows系统对于Win32程序的单进程可用内存进行了限制,即最多可用2G内存,其余2G预留给操作系统,即使你是在win64的平台下运行win32程序,单进程也只能调用2G内存。
但是我在Cview类的构造函数中申请一个float型的的动态数组,我差不多需要1.7G内存,加之在程序运行过程中需要分配一些结构体,容器以及数组的内存以及程序本身的内存,很有可能超过2G,这就是为什么在程序运行过程中提示内存不足的原因。
百度了一下,现在贴下一些大大写的技术以及博客的链接,对我了解这个问题以及解决这个问题帮助极大,在此感谢以下的技术大大
& & & (1)32位模式下C/C++程序可用最大内存 &http://m.blog.csdn.net/article/details?id=
& & & (2)开启PAE以及突破win32系统单个程序的2G内存限制 - Q75X的日志 - 网易博客 &/xs98775@yeah/blog/static//
& & & (3)让32位应用程序不再为2G内存限制苦恼 - 一蓑烟雨的专栏 - 博客频道 - CSDN.NET &http://blog.csdn.net/flyingworm_eley/article/details/6523326
& & & (4)&64位Windows7系统下让32位程序支持4G虚拟内存 | 上岸QQ的鱼 &/computer-skills/64-windows7-system-to-support-32-bit-process-virtual-memory-4g
& & & &(5)&32位,64位和内存的那点事 | 果壳网移动版 &/blog/61322/
& & & &在看了上述的博客后我总结了下列的方法,其细节以及原由还是点击上述的链接进去查看、
& & & (1)修改boot.ini文件,开启PAE以及AWE模式,修改本地安全策略,见这篇博客32位模式下C/C++程序可用最大内存 &http://m.blog.csdn.net/article/details?id=
以及这篇博客让32位应用程序不再为2G内存限制苦恼 - 一蓑烟雨的专栏 - 博客频道 - CSDN.NET &http://blog.csdn.net/flyingworm_eley/article/details/6523326还有这篇博客
开启PAE以及突破win32系统单个程序的2G内存限制 - Q75X的日志 - 网易博客 &/xs98775@yeah/blog/static//
(2)下载一个小插件,这个插件可以让你为指定的.exe win32程序成功的使用超4G的内存,亲测可用。见这篇博客64位Windows7系统下让32位程序支持4G虚拟内存 | 上岸QQ的鱼
&/computer-skills/64-windows7-system-to-support-32-bit-process-virtual-memory-4g&
插件的下载链接我分享到百度网盘:/s/1i4KkJ9j
(3)最根本的方法还是将你的整个程序一直到win 64位的VS上,win64位的程序理论上单进程可用内存比win32程序要大的多。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34176次
积分:1163
积分:1163
排名:千里之外
原创:82篇
转载:12篇
评论:27条
(2)(5)(18)(7)(11)(13)(13)(5)(2)(5)(4)(3)(1)(4)(2)昨天调了一下API结果发现同步ReadFile居然没堵塞就返回,那同步和异步岂不是一个样了,太阳!线程没错,都没错,所以又拿资料出来看,发现有个超时设置,应该就是他了,嘿嘿。我原本程序:COMMTIMEOUTS TimeO//设定读超时TimeOuts.ReadIntervalTimeout=MAXDWORD;TimeOuts.ReadTotalTimeoutMultiplier=0;TimeOuts.ReadTotalTimeoutConstant=0;//在读一次输入缓冲区的内容后读操作就立即返回,//而不管是否读入了要求的字符。//设定写超时TimeOuts.WriteTotalTimeoutMultiplier=100;TimeOuts.WriteTotalTimeoutConstant=500;SetCommTimeouts(hCom,&TimeOuts); //设置超时我留意了一下,它所说的超时是指串口读写操作超时而总超时就是函数返回的标准,如果操作在总超时之前没完成,那么就结束了本次操作,如果在总超时之前完成了,那马上返回,官方资料:COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是:总超时=时间系数×要求读/写的字符数+时间常量 例如,要读入10个字符,那么读操作的总超时的计算公式为:读总超时=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant 要注意到无论读或者写,都有个要求的数目和实际读到的数目引用ReadFile(hCom,str,wCount,&wCount,NULL);wCount要求读入的数目,&wCount读到的数目引用总超时=WriteTotalTimeoutMultiplier×wCount+ReadTotalTimeoutConstant而异步虽然是靠事件,但是其内部一定是另起了一个线程。OK,超时介绍到此
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
您需要登录后才能评论,请

我要回帖

更多关于 vc2010 串口编程 的文章

 

随机推荐