作者clarkman (凉雨)
站内Programming
标题[问题] Timer、Thread
时间Sun Feb 28 16:13:44 2010
我在已经吃掉许多资源的程式下,想要定期接收RS232的资料
但是RS232要求必须在40ms接收2个Com Port的资料
处理速度却慢了一些,无法在那麽短的时间处理
1. timer
单线程,我使用timersetevent配合timeBeginPeriod,
即使我调高他的Priority为最高,但他还是和程式是同一个thread
因此,不是timer大量吃掉程式的资源,就是程式导致timer不够快
目前是使用同一个timer一次抓两个comport,所以一个comport传送接收必须20ms内
2. thread
目前作法是拉两条thread,每个comport一个thread,
但由於两条的Priority都调最高,所以会导致彼此互抢资源
另外,使用thread不断收资料,因此是写了一个while,搭配sleep
sleep也是非常不准....即使使用了timeBeginPeriod,仍不够快
补充:今天使用一条thread,一次收两个comport的资料,效果好很多
不过使用ClearCommError判断队方的parity是否有切换成MARK
总是得sleep 5ms以上才会很准,不然很容易判断错误
常因为要sleep,导致抓资料的速度太慢
3. 多线程timer
有查到.net有个system.threading.timer,但是程式是mfc,却无法使用
很头痛,不知道大家在处理上面有什麽更好得方法吗?
有人建议过使用mutli-process,不过又怕os不断的搬资料,反而更慢
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.22.144.222
1F:→ fissh:你接收/传送的资料量是几byte? baudrate是? 61.229.30.165 02/28 17:58
2F:→ clarkman:资料量不一定,有1~70几byte都有 125.230.11.74 02/28 21:12
3F:→ clarkman:baudrate 19200 125.230.11.74 02/28 21:13
※ 编辑: clarkman 来自: 125.230.11.74 (02/28 21:22)
4F:→ piopoip:试看看IO completion port 61.64.211.17 03/01 02:26