是这样的:
我做了个模拟服务器里面开了300个线程,每个线程的工作就是连续向客户端发送600条数据,每数据包大约200字节,间隔一秒后重复前面动作(即连续发送N条数据);
在客户端接到数据后马上通过消息通知界面,界面根据消息提取数据刷新界面某列表的数据,这样发现CPU上到100%,且界面一直打不开不响应.后来我将刷新界面列表数据放线程里处理(即来一消息开一线程,线程数狂增到接近2000),界面可以打开但鼠标响应超慢在晃动,CPU依然100%.这个问题应该怎样解决啊,望各位指点指点啊,跪谢了!!!
我做了个模拟服务器里面开了300个线程,每个线程的工作就是连续向客户端发送600条数据,每数据包大约200字节,间隔一秒后重复前面动作(即连续发送N条数据);
在客户端接到数据后马上通过消息通知界面,界面根据消息提取数据刷新界面某列表的数据,这样发现CPU上到100%,且界面一直打不开不响应.后来我将刷新界面列表数据放线程里处理(即来一消息开一线程,线程数狂增到接近2000),界面可以打开但鼠标响应超慢在晃动,CPU依然100%.这个问题应该怎样解决啊,望各位指点指点啊,跪谢了!!!
解决方案 »
- 关于记录数据的问题
- 程序编译之后,为什么不出现MFC 的界面的具体是什么原因?请解答 ?
- 一个毫无水平的问题,但是不得不问
- 如何在程序中调用.exe文件.
- 如何在DLL中加入ActiveX控件
- 如何显示一篇文章的内容?
- 汇编能不能设置调用规则,就像c里面的_stdcall,_cdecl等一样???
- 关于多线程下载的问题,这样理解对否(FTP有关?)
- 请问如何做透明窗口?
- 用C语言编写(最好是VC++),电脑上是USB蓝牙适配器,用这个来搜索周围蓝牙,并把搜索到的地址名字显示出来,并且可以配对
- 我想用CxImage在jpg图像上输入一些文字,可行吗
- MFC 的SDI程序界面更新问题,各位有什么好的想法。
第一、是最笨的方法,但是,很实用,界面每过N秒刷新一次,不用接到数据就刷新!
第二、当接到数据的时候,发消息给界面,通知界面刷新,这里面要求界面每次刷新前,要将所有的要求刷新的消息清空,MFC支持这种取消息方法的!
第三、建一个管理刷新的工具类,用这个类来管理,具体方法,自己定!
MSG msg;
while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
而根据楼上说的:每次刷新的时候,已经收到好多数据了,将这些数据一次刷新出来,好象不可行,因为每次的数据都不同,比如第一个数据对应的是列表控件里第一行的数据,而第二个又可能是对应列表最后一行,第三个接收的数据有可能在列表中没有与之匹配的行就不用更新了,所以第二种方法我想应该不适合了.
简化伪代码:
在数据解析线程:
DATA *pData=new DATA
pMyView->postmessage(WM_DATA,REALDATA,(LPARAM)pData)在CMYVIEW的OnRecv
case REALDATA:
pdata=(DATA*)lParam
刷新数据
再者,看你如何理解实时的概念了.对于某些情况来说,一小时刷新一次可以认为是实时,某些时候1秒刷新一次可以认为是实时,有时候1毫秒也不见得是实时.这就看你系统对时间的要求了.