多线程问题,能不能解决这样的问题 ( 积分: 30 )

  • 主题发起人 主题发起人 redcoffee
  • 开始时间 开始时间
R

redcoffee

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的程序中需要调用一动态库中的函数function function_name()
调试程序时跟到这个函数执行时,会出现明显的停顿现象,就是他执行会占用一定的时间,这时CPU占用率会骤然上升,导致在用户使用中,到这里鼠标会有停顿的现象,若此时用户正在移动鼠标,鼠标便会出现跳跃,请问如果将此函数放入多线程,能不能解决这问题,我觉得是不是不能啊,因为只是一个函数所占用的时间,而放入线程中时执行到此处必然也会产生这样的现象吧,请指教
 
在我的程序中需要调用一动态库中的函数function function_name()
调试程序时跟到这个函数执行时,会出现明显的停顿现象,就是他执行会占用一定的时间,这时CPU占用率会骤然上升,导致在用户使用中,到这里鼠标会有停顿的现象,若此时用户正在移动鼠标,鼠标便会出现跳跃,请问如果将此函数放入多线程,能不能解决这问题,我觉得是不是不能啊,因为只是一个函数所占用的时间,而放入线程中时执行到此处必然也会产生这样的现象吧,请指教
 
你的函数有没有访问设备驱动程序?
放入线程中执行应该可以解决这个现象。
如果加线程还不行,可能是你的进程优先级设置为实时,
或你的函数将进程优先级提高到实时间或访问设备驱动程序
请将你的程序的进程优先级设置为一般模式。
如果是调用进程COM对象,系统装载初始化COM对象时可能也会出现这种情况。
 
加线程可以吗?因为是一个函数执行时占用了CPU,即时在线程中当执行到这里时,也应该同样占用CPU啊,??
 
多线程解决不了这问题
因为鼠标指针是系统资源,是系统响应的硬件消息,如果你的函数使鼠标指针停顿,那么说明系统受到影响了,和你的程序结构没关系,放到哪里执行都一样。
举个例子就明白了:如果你的程序以一定的频率调用这个函数,那么你看看是不是包括桌面在内的所有程序都受影响呢?如果是,那么运转在另外的进程里都不行,何况同一个进程里面呢?
 
代码执行当然要占用CPU时间了。
你可以把线程的优先级设低,你在调用函数或线程之前调用:
SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_NORMAL);
请查看 这两个WinAPI的帮助说明。
也许你的函数中对进程的优先级进行了设置,比如设置成实时方式,那么
你的程序在占用CPU的时候会导致鼠标,键盘反映迟钝。
也就是说你调用的函数可能在前面执行了下面的函数,请将他们去掉,就不会
出现鼠标跳跃的情况了。
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
 
to survival:
对,就是这样子,所有的操作都有影响。
to Hexi:
我认同survival的观点,程序中很多语句执行速度非常快,我是在跟踪情况下,一下却过,而我的那个函数,只一调用语句,却明显会停滞一定时间,且CPU会马上达到80以上,这样放在线程也应该不可以,因为这个函数不可再分割了,在哪里都要一次来执行它。所以.....
 
你在主程序里找问题,不如在function_name里找找问题
 
楼上说的好
问题在于你的函数有问题,不再你的调用上,事实上多线程只能让你比现在更慢,线程自己也是要时间的,优化你的函数的算法吧
 
真诚谢谢各位
 
后退
顶部