window XP的一个奇怪问题

victor_cui 2009-02-25 04:13:49
我有一个应用程序,每60ms会收到一个数据包,但是当切换其他应用程序UI的时候,会发现影响了数据的收发,经常会被耽搁两三百毫秒一下把几个数据一次收上来,我使用了select和wsaselect模型都有这个问题,但是vista下测试没有发现,请问其中的原因,如何避免?
我有一个简单的测试程序,阻塞在socket上不停的接收,这个问题就不存在了,不知道为什么
...全文
174 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
瓶盒 2009-03-05
  • 打赏
  • 举报
回复
可能是消息缓冲下来了,可以试下改用信号量来控制。
coolwwwlong 2009-03-05
  • 打赏
  • 举报
回复
流技术,很有前途的
victor_cui 2009-03-03
  • 打赏
  • 举报
回复
跟踪发现问题出在postevent函数上,虽然这个函数大多数情况下会很快返回,但是当进程切换的时候,偶尔这个函数返回需要数百毫秒,问题就出在他身上。另一个问题,我现在窗口也是在主线程创建,而另一个线程来处理这个自定义窗口的消息,那这个窗口和主线程用相同的消息队列吗
cnzdgs 2009-02-27
  • 打赏
  • 举报
回复
那就把这两个线程优先级设高,其它不变。
victor_cui 2009-02-27
  • 打赏
  • 举报
回复
我的程序是这样的,一个单独的网络线程负责数据收发,然后交给别的线程处理
victor_cui 2009-02-27
  • 打赏
  • 举报
回复
我们的程序是语音应用,出现这样的状况会很大的影响语音质量,而增加buffer又会是delay变长,所以都不是我们所期望的
Conry 2009-02-27
  • 打赏
  • 举报
回复
这时因为虽然网络的包网卡收到了,但是cpu在处理其他程序顾不上你,等他顾上你了,网卡已经收到好多数据了
这些根本就不应该是你操心的,你就把接收处理好,从你的描述来看主要是粘包问题处理好就行了,
如果你这时运行一个耗资源的其他程序,你的这个程序会更慢,
victor_cui 2009-02-26
  • 打赏
  • 举报
回复
把进程和线程的优先级都提高到实时,并没有明显的改善,真不知道windows的实时有什么用。抓包看数据还是均匀的,应该是进程不能及时得到数据已经来到的通知,不知道有什么方法可以避免
cnzdgs 2009-02-26
  • 打赏
  • 举报
回复
你用一个单独的线程来接收,把这个线程的优先级设高一些,主线程不变。
victor_cui 2009-02-26
  • 打赏
  • 举报
回复
我使用了WSAAsynSelect和Select,都有这个问题。我提高进程和线程的优先级到最高,没有明显的改善。应该跟我应用程序的UI无关,因为我把我的程序最小化,只是来回切换其他应用程序的UI,还是对我的应用程序造成了影响。
另,vista没有问题,如果去掉XP的高级显示特效,问题明显得到改善,我想还是系统调度出了问题。不知有什么方法可以调优
rookieme 2009-02-26
  • 打赏
  • 举报
回复
优先级提高了会假死机的,换一个定时器,vista定时器的实时性高
Wenxy1 2009-02-26
  • 打赏
  • 举报
回复
把接收数据的线程的优先级设置一点.
hemiya 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 victor_cui 的回复:]
把进程和线程的优先级都提高到实时,并没有明显的改善,真不知道windows的实时有什么用。抓包看数据还是均匀的,应该是进程不能及时得到数据已经来到的通知,不知道有什么方法可以避免
[/Quote]
进程内的线程再高也没有用,这个只是相对进程内的线程优先权.
闪破风浪 2009-02-26
  • 打赏
  • 举报
回复
好精细~
blackcat242 2009-02-26
  • 打赏
  • 举报
回复
是不是你的界面刷新影响到了数据的接收,你是如何接收的?是否跟ui有什么牵连
cnzdgs 2009-02-26
  • 打赏
  • 举报
回复
你的程序是采用什么样的机制来接收数据?
  • 打赏
  • 举报
回复
最好将接收的线程设置为 THREAD_PRIORITY_TIME_CRITICAL
bitwwzhang130 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
Windows系统中前台线程优先于其它线程,你可以用SetThreadPriority把自己的线程有限级设高一些。
[/Quote]
同意
dxk01 2009-02-25
  • 打赏
  • 举报
回复
和windows的定时精度有关,windows是多任务的,精度难以达到ms级别,如果vista没有的话,就不知道它是如何解决的
百事烟 2009-02-25
  • 打赏
  • 举报
回复
LZ做程序好细,除了XP,我在win2000也遇到同样的问题,不过没考虑,就当它不存在了
加载更多回复(1)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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