应用程序很卡,怎么增加线程?没分了,请各位帮忙

我在这儿等你 2014-01-09 11:37:02
MFC应用程序,界面上有一个列表控件,负责显示从网络接收的数据,当数据量很大时,列表控件不停地刷屏,此时单击菜单打开一个模态对话框,对话框没有弹出,再点击别的,都点不了,好像模态对话框已经弹出,列表控件依然在刷屏。
这是怎么回事呢?是不是单线程只能处理一个任务呢?能否通过增加线程解决这个问题呢?
没分了,请各位指点,谢谢
...全文
166 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
我在这儿等你 2014-01-11
  • 打赏
  • 举报
回复
还没找到好的方法,结贴
我在这儿等你 2014-01-10
  • 打赏
  • 举报
回复
引用 9 楼 lvxinjian_cn 的回复:
[quote=引用 8 楼 zgguoqing 的回复:] [quote=引用 6 楼 lvxinjian_cn 的回复:] 算了,看样子你对线程如何建立使用啥的也不是特别了解 给你出一个歪门邪道的思路吧。 如果数据量的别大,你的VirualList显示列表控件不停地刷屏是没有意义的,因为你只能看到不停的刷屏,实际内容啥也看不到。所以显示没意义,所以就是,不显示了,把收到的内容写日志就完了,好多大的程序都是不显示,有的连个界面都没有,查东西都是去日志里看。
线程我以前用过简单的,如果增加一个线程,那是不是要把网络接收和VirtualList的刷新放在这个线程里?如果这样,会存在一些问题,异步套接字是在主线程中创建的,切换上下文才能在子线程中使用,主线程和子线程都要用到该套接字,来回切换可能会出现问题。 [/quote] vc我个人感觉是这样,主对话框的作用是显示和接收用户鼠标或键盘输入,然后建议编程人员建立各种线程来实现真正的后台工作。根据你的程序,建议主程序主要是负责显示,然后建立新的线程来负责接收数据,线程接收到数据后,发给主程序显示,这样主程序就会一直得到不同的消息响应(消息如刷新,单击界面按钮等等)。[/quote] 高手啊,听君一席话,感觉豁然开朗。我的应用程序主要处理两大块,一块是网络的发送和接收,另一块是数据库的操作。 用户配置的数据写入数据库,切换界面的时候再把数据读出并显示出来,另外做了一个发送数据的界面,单击按钮之后从数据库中取出数据并通过网络发送出去。接收来自网络的数据写入数据库并在VirtualList列表中动态显示,在报表界面可以查询这些数据。 像我这种情况,增加几个线程比较合理?怎么对线程分工?
lvxinjian_cn 2014-01-10
  • 打赏
  • 举报
回复
引用 8 楼 zgguoqing 的回复:
[quote=引用 6 楼 lvxinjian_cn 的回复:] 算了,看样子你对线程如何建立使用啥的也不是特别了解 给你出一个歪门邪道的思路吧。 如果数据量的别大,你的VirualList显示列表控件不停地刷屏是没有意义的,因为你只能看到不停的刷屏,实际内容啥也看不到。所以显示没意义,所以就是,不显示了,把收到的内容写日志就完了,好多大的程序都是不显示,有的连个界面都没有,查东西都是去日志里看。
线程我以前用过简单的,如果增加一个线程,那是不是要把网络接收和VirtualList的刷新放在这个线程里?如果这样,会存在一些问题,异步套接字是在主线程中创建的,切换上下文才能在子线程中使用,主线程和子线程都要用到该套接字,来回切换可能会出现问题。 [/quote] vc我个人感觉是这样,主对话框的作用是显示和接收用户鼠标或键盘输入,然后建议编程人员建立各种线程来实现真正的后台工作。根据你的程序,建议主程序主要是负责显示,然后建立新的线程来负责接收数据,线程接收到数据后,发给主程序显示,这样主程序就会一直得到不同的消息响应(消息如刷新,单击界面按钮等等)。
我在这儿等你 2014-01-10
  • 打赏
  • 举报
回复
引用 6 楼 lvxinjian_cn 的回复:
算了,看样子你对线程如何建立使用啥的也不是特别了解 给你出一个歪门邪道的思路吧。 如果数据量的别大,你的VirualList显示列表控件不停地刷屏是没有意义的,因为你只能看到不停的刷屏,实际内容啥也看不到。所以显示没意义,所以就是,不显示了,把收到的内容写日志就完了,好多大的程序都是不显示,有的连个界面都没有,查东西都是去日志里看。
线程我以前用过简单的,如果增加一个线程,那是不是要把网络接收和VirtualList的刷新放在这个线程里?如果这样,会存在一些问题,异步套接字是在主线程中创建的,切换上下文才能在子线程中使用,主线程和子线程都要用到该套接字,来回切换可能会出现问题。
我在这儿等你 2014-01-10
  • 打赏
  • 举报
回复
引用 5 楼 u010588063 的回复:
AfxBeginThread线程去解决,界面本身就是一个线程,如果他再接收数据时候会一直不停接收程序会卡死哪里,你用AfxBeginThread去解决
用AfxBeginThread启动一个工作者线程还是用户界面线程呢?应该用工作者线程吧。增加子线程会存在一些问题,比如套接字是在主线程中创建的,子线程不能直接使用,切换上下文才能使用,主线程和子线程都要用到该套接字,来回切换可能会出现问题。
dahaiI0 2014-01-09
  • 打赏
  • 举报
回复
AfxBeginThread创建线程,线程中去接收网络数据,接收到后发消息给主线程去更新列表,如果插入的数据项非常非常多,可以考虑那啥虚拟列表,百度去我也没用过这玩意儿
lvxinjian_cn 2014-01-09
  • 打赏
  • 举报
回复
算了,看样子你对线程如何建立使用啥的也不是特别了解 给你出一个歪门邪道的思路吧。 如果数据量的别大,你的VirualList显示列表控件不停地刷屏是没有意义的,因为你只能看到不停的刷屏,实际内容啥也看不到。所以显示没意义,所以就是,不显示了,把收到的内容写日志就完了,好多大的程序都是不显示,有的连个界面都没有,查东西都是去日志里看。
u010588063 2014-01-09
  • 打赏
  • 举报
回复
AfxBeginThread线程去解决,界面本身就是一个线程,如果他再接收数据时候会一直不停接收程序会卡死哪里,你用AfxBeginThread去解决
我在这儿等你 2014-01-09
  • 打赏
  • 举报
回复
引用 2 楼 RobertBaker 的回复:
问题不在于增加线程, 解决问题要, 一、用 VirualList, 二、不要从子线程用 SendMessage 给主线程,应该用 PostMessage。(这应该才你造成你问题的原因)。
我现在没有使用线程,列表控件用的是VirtualList,列表控件内容的动态显示是正常的,因为数据量很大,列表控件一直在不停地刷新数据,此时点击菜单打开模态对话框,对话框没有弹出,程序出现假死,点击别的都没反应,好像模态对话框已经弹出,只能通过任务管理器结束程序。 程序假死时,列表控件还在正常地更新数据。
我在这儿等你 2014-01-09
  • 打赏
  • 举报
回复
引用 1 楼 dahaiI0 的回复:
AfxBeginThread创建线程,线程中去接收网络数据,接收到后发消息给主线程去更新列表,如果插入的数据项非常非常多,可以考虑那啥虚拟列表,百度去我也没用过这玩意儿
我用的是异步套接字CAsyncSocket,在网上查资料说,异步套接字没有必要使用线程,如果一定要用的话很麻烦。 我的列表控件是VirtualList,刷屏是正常的,只是刷屏的时候点击菜单打开模态对话框的时候,对话框没有弹出,此时程序假死,再点击别的都点不了,看上去模态对话框已经弹出了,只能用任务管理器结束程序。
LiuYinChina 2014-01-09
  • 打赏
  • 举报
回复
问题不在于增加线程, 解决问题要, 一、用 VirualList, 二、不要从子线程用 SendMessage 给主线程,应该用 PostMessage。(这应该才你造成你问题的原因)。
温馨提醒: 为了您更加方便地使用本程序,将程序压缩包解压到D盘的netpiao文件夹下,然后点击netpiao.exe即可开启本程序,祝君购票愉快。 本程序口碑良好,是当前网上购票的最佳利器,大家朋友QQ群论坛里等相互宣传,以便让更多的人顺利地买到火车票。 再次强调:本程序只为真正需要买票的朋友提供方便,勿用于其它非法商业用途,否则一切后果自负,谢谢。 心蓝12306订票助手-Www.SangSan.Cn 本程只为真正需要买票的朋友提供方便,勿用于其它非法商业用途,否则一切后果自负。为防止黄牛党等用于商业用途,慎重决定:以后每天最多只出售100个注册码,敬谅解。 本程序绿色环保,无需安装,下载即可使用,不需要时只需删除程序本身即可。同时如果360卫士QQ管家之流若提示风险,纯属误报,大家放心,建议大家购票时退出它们。 春节过年回家,这火车票,谁都伤不起。最后预祝各位通过本软件顺利买到票,祝大家春节快乐。也希望各位可以帮忙身边朋友QQ群等推广下本程序,让更多的人顺利地买到火车票。 程序特点: 1、采用心蓝数据自主研发多线程异步执行技术,输入一次验证码后即可自动无数次尝试登陆直到成功; 2、可根据自身网速自行设置自动登陆间隔、线程数和连接超时时间,让您更加快速地登陆订票网站; 3、登录功后自动IE打开浏览器,不要理会登录窗口,直接点“车票预订”即可,且可设置保持在线; 4、内置车票预订窗口,用户无需登录IE即可进行查询预订,同时支持自动查询和自动提交订单功能; 5、自动提交订单支持自定义日期,网络出票延时问题不复存在,准点出票,准点瞬间秒杀抢购完成; 6、本程序免费升级,一次购买,终生享用,官方发布新版本后程序会自动提示,方便大家下载更新; 7、在此承诺:本程序不含任何恶意执行代码,所有登陆订票等过程均直接与铁路局网12306.cn通讯; 8、本程序只为真正需要买票的朋友提供方便,勿用于其它非法商业用途,否则一切后果自负,谢谢。 自动登陆,自动保持在线,自动查询余票,自动提交订单,修改提交订单的日期提前抢票,还有终极必杀技的“自定义预订”。啥都别说了,走过路过的朋友,赶紧介绍给你身边的朋友,一起分享这振奋人心的程序吧。 常见问题: 1、程序打开后提示“应用程序错误,正常初始化失败”等,根本就看不到软件界面。 这种情况一般是因为您的操作系统没有安装微软的.NET 2.0或以上组件,下载安装即可。Vista和Win7操作系统已集成.Net 3.5,所以不会出现此异常。 .Net 2.0中文版下载地址:http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe 2、程序打开后,提示我“12306证书没有安装”,可我明明是安装成功了的啊,怎么解决呢? 这个问题是由于您的证书安装不正确导致,重新下载证书,并按里面的“SRCA根证书安装说明手册”重新安装即可解决问题。如果还不行,这也是您自己电脑的问题,联系您的网络管理员或者与我们的客服取得联系以取得相关技术支持。 3、程序提示登陆成功了,可我打开IE后提示还是要我登陆,这是怎么回事呢,不是说自动登陆的吗? 这个情况是很少数一部分人电脑设置的问题。首先出现这个提示您登陆时,直接点击网页左上角的“车票预订”,这时正常情况,右边就会显示出您该账户的姓名了。如果没有显示,可尝试多点击几次。实在不行,那么就是电脑的问题了。一般来说,此时只需要清理下IE的Internet 选项下“浏览历史记录”和内容选项卡里的“清除 SSL 状态”后,再次登陆即可。 4、软件确实很好用,输入一次验证码就会自动不断登陆,可是免费版和注册版有什么区别呢? 免费版和注册版在程序功能上有所区别,如免费版没有自动保持在线功能,不能使用内置的自动余票查询和自动提交订单功能,具体区别在程序使用过程中会有相关提醒。该软件开发我们投入了很多物力人力,因此希望大家可以理解,购买注册码升级成注册版也是对我们不断改进程序的支持。 5、我要购买,我点击了软件界面上的“软件注册”,有个识别码,然后注册名和注册码怎么填呢? 软件注册可以点软件界面或者帮助菜单里的“软件注册”,再点击弹出窗口里面的“在线自助购买注册码”链接。这时将打开心蓝数据的该产品的购买页面,大家按页面提示注册用户,付款,购买确认支付即可。购买后,在“用户中心”下面的“软件产品”里就可以看到该商品。再点击“管理”进去即可自助“生成注册码”,最后把注册码和注册名复制到软件注册窗口保存就OK了。 在此声明:本程序官方统一注册码25元一个(永久使用),任何高于或低于该价格的注册码均不是本公司提供的正规注册码,勿上当受骗。 先下载最新版程序,然后购买注册码,再点击程序界面上的“软件注册”,上面会显示出您电脑的识别码,之后把识别码复制到心蓝数据里“用户中心”-“软件产品”—“管理”中的识别码一行,然后点击“生成注册码”。最后网页这里的注册名和注册码输入到程序的“软件注册”对应的位置即可。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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