请教:多线程之间的切换问题

tangyuan   2010-5-19 10:28 楼主
项目描述:
用atmel的ARM9芯片做一个工厂数据采集的项目,采用WinCE5.0系统,底层和系统都是供应商做好的,我不能修改.供用商提供SDK和简单的示例代码.不支持图形窗口显示(因为配的是128*64的单色LCD),支持win32 API编程.
整个项目中包括IC卡读写(COM2, 串口方式通信), 按键处理(5*7矩阵键盘), 信号采集(COM3, RS485通信),UDP通信(数据要上传到服务器,服务器下达数据给终端).
问题:
这些功能模块我分别写了测试程序测试都可以正常工作,现在把这几个模块放在一个程序里就不正常了.
我的做法是,每一个功能模块分别开了一个线程,总共有五个线程,线程A收COM2的数据,线程B收COM3的数据,线程C做按键处理,线程D做UDP数据接收,线程F是主线程,程序运行起来后发现始终在做UDP数据处理, 按键和IC卡读写,信号采集都没了反应.
请教高手:多个线程之间要如何做切换?就此项目而言是否有更合理程序结构方式?
谢谢!

回复评论 (14)

之前没做过数据通信方面的案子,因此高人们指点指点...
点赞  2010-5-19 10:32
线程D一直再跑,sleep让它休息一下,给其他线程一个机会。
点赞  2010-5-19 15:36
引用: 引用 2 楼 joyzml 的回复:
线程D一直再跑,sleep让它休息一下,给其他线程一个机会。

每个线程我都加了Sleep(10); 这几个线程的优先级应当是平等的,但感觉还是没有切换.
点赞  2010-5-19 15:51
其实不管有没有 sleep,都会切换的。OS不是白痴,你不SLEEP他就让你一直run
首先,你是否敢肯定你的CPU一直被UDP线程占用??如果能够肯定地说“UDP线程绝对一直占用CPU”,那么看看优先级怎么设置的,加入你UDP里面的某片等待的代码练OS都不能够中断之,死机必然的。

点赞  2010-5-19 16:10
建议看下线程优先级,创建线程函数,分配的时间片!
点赞  2010-5-19 16:39
帮你顶
点赞  2010-5-20 10:49
首先在每个线程操作时应该有互斥之类的保护数据,然后是你的线程调度问题!只有管理好应该没有问题的!关注中....
点赞  2010-5-20 11:20
我也同时开过三个线程.没有问题啊...
看看线程是否开启成功?线程是否不正常退出了?
点赞  2010-5-24 16:32
可能还是代码上的一个小错误
既然是厂家做好的设备和os,可以用kernel tracker看看
点赞  2010-5-24 22:23
引用: 引用 9 楼 guopeixin 的回复:
可能还是代码上的一个小错误
既然是厂家做好的设备和os,可以用kernel tracker看看

不好说意思,少打了几个字,是“看看线程的切换是否如你所想”
网上可以找到相关文档的
点赞  2010-5-24 22:24
有没有加锁?
点赞  2010-5-25 19:21
试着把没响应的线程优先级提高看一下有没有反应
点赞  2010-5-25 21:45
看看程序那边有没有死锁,我的程序同时在跑22个线程没问题,不过大部分都在休眠的。多线程关键还是同步问题
点赞  2010-5-26 10:44
引用: 引用 2 楼 joyzml 的回复:
线程D一直再跑,sleep让它休息一下,给其他线程一个机会。


这个有用,还有一些线程之间要设置一些事件之类的同步。
我就被这些东西纠结过。

这个线程之间的同步,事件,信号等要用好。
点赞  2010-5-26 10:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复