各位好!现在有这样一个问题,之前的程序是在XP上开发的,但是由于现在XP已经停产了,所以要到WIN7下运行。程序运行的时候,开了9个线程,4个处理线程,4个保存文件线程,1一个IO查询线程。IO查询线程是一直在查询输入口,如果有对应的处理,就激活某个处理线程去处理,但是线程处理的过程中,又要使用IO来发送一些处理结果。所以在查询线程和处理线程中,都对IO的查询加了锁,使用EnterCriticalSection和LeaveCriticalSection来控制。这样的做法在XP下是正常的。触发信号可以正常激活处理,处理也能顺利发送处理结果。但是现在在WIN7下有如下问题: 在收到触发信号,处理过程中,在发送结果之前,先EnterCriticalSection,这个进入临界区的时间非常的慢,时间在几百毫秒到几千毫秒不等。正常情况下远小于一个毫秒。分析应该是IO查询线程一直在查询IO,在不停的进入临界区,查询,退出临界区操作。可能是由于WIN7系统对于线程管理的部分与XP不同,导致这个线程运行过于频繁,其他线程抢占不到这个临界区。所以想问两个问题:
1。这个分析是正确的吗? 异或有其他解释?
2。如果解决这个问题?谢谢!灰常灰常急!再谢。另外 CPU 是 I7 四核八线程 使用了一块PCIE的图像采集卡 使用了一块PCI的IO卡 希望能有帮助
1。这个分析是正确的吗? 异或有其他解释?
2。如果解决这个问题?谢谢!灰常灰常急!再谢。另外 CPU 是 I7 四核八线程 使用了一块PCIE的图像采集卡 使用了一块PCI的IO卡 希望能有帮助
你可以分析一下LPCRITICAL_SECTION结构体,看是被哪个线程占用了。
你可以分析一下LPCRITICAL_SECTION结构体,看是被哪个线程占用了。谢谢! 我看一看是否可以使用您的意见试一下
难道楼主的查询进程里面没有停顿?导致CPU资源全被查询线程用完
你最好找到上锁与解锁之间的那个费时间的动作来自哪里.如果不存在这个费时操作, 难道是你的IO线程优先级太高? 疑惑中.