一个需要经验来回答的问题,请教高人
我有一项工程:程序要通过串口读数据,并且要将数据存入网络数据库中。现在分开作简单。因串口读数据很频繁,数据要及时存入数据库中,我想做成多线程,一个线程读串口,一个线程将数据存入数据库中。请问有谁做过吗?串口读出的数据用什么暂存供数据库线程读比较好,因该注意什么?
请大虾们明示!!!!
问题点数:29、回复次数:16Top
1 楼luhongjun(过江项羽)回复于 2001-07-11 21:10:35 得分 0
串口读数据有两种方式:1:查询方式。2:中断方式。
如果使用查询方式,应该做成多线程。使用中断方式不用了,他本身已经是多线程的了。
建议你使用MSCOMM32.OCX控件,比较简单。
Top
2 楼BlueTrees(蜗牛)回复于 2001-07-11 21:11:57 得分 0
我看着没必要,因为读和写是要同步的,并且是串行的,和单线程的有差别吗?或者你的理由?Top
3 楼asili(吃饱了-撑着)回复于 2001-07-11 21:32:35 得分 0
各位老大,我读串口使用中断方式,数据已读出来,中断方式自己管理多线程,我也不管。我是想
时程序除读串口外,另开一线程将数据存入数据库中。串口读出的数据用什么暂存供数据库线程读比较好?
谁能给点提示!!Top
4 楼snowglave(独孤九剑)回复于 2001-07-11 21:44:37 得分 0
用SPCOMM控件可以实现你的要求,关于该控件可以自已去找吧.Top
5 楼asili(吃饱了-撑着)回复于 2001-07-11 22:04:17 得分 0
可能是我没有讲清楚:
其实我主要是想问,用什么来暂存从串口读出来的一条一条的数据比较好,这样程序可以一边从串口中读出一条一条的数据(存到数据库中就是一条一条的记录),一边将数据存入数据库中。串口读出的数据为BARCODE,因为程序读串口时缓时急,所以我想将存数据库部分做成一单独线程。我想知道用什么来暂存读出的数据比较适合 。请教了!!!Top
6 楼liuchcn(michael)回复于 2001-07-12 01:07:24 得分 0
通常串口的速度远远比不上你把数据存入数据库的速度,而且它有缓冲的。
所以我觉得最好不要搞多线程,恐怕问题会很多。Top
7 楼oldfriend(并不陌生)回复于 2001-07-12 03:35:26 得分 0
问题好像不用那么复杂。如果你的通讯数据多,而且需要预处理,放在一个临时表里就可以啦。
然后满足条件写入总库(用Timer控件定时处理)。
Top
8 楼Hillside(河东河西)回复于 2001-07-12 04:34:22 得分 0
我现在忙活的一个项目和你的类似,不过读取串口和数据处理一共使用了2个程序.第一个程序读出串行数据后,放入共享缓存,然后向第二个程序发PostMessage.第二个程序有2个线程,主线程得到Message后,更改一个标志位通知另一个线程,这个线程负责到共享区去拿数据,但并不做长时间工作.如果某项工作耗时,则再通过PostMessage通知主线程去处理.如果第一个程序可以直接对第二个程序的副线程发Message,可能问题更简单.Top
9 楼asili(吃饱了-撑着)回复于 2001-07-12 07:54:46 得分 0
多谢各位老大好建议Top
10 楼asili(吃饱了-撑着)回复于 2001-07-12 09:45:54 得分 0
谁能给我讲的再详细一点的介绍吗?用到的具体的DELPHI 技术
真是不好意思,这么少分,我在开页加分。Top
11 楼Hillside(河东河西)回复于 2001-07-12 14:20:01 得分 29
如果你对我的方案感兴趣的话,我可以讲详细些.我今天刚到,积分较少,请帮助Top
12 楼LittleStar(牛牛)回复于 2001-07-12 15:16:09 得分 0
可能单线程就可以了
用一个数组缓冲吧Top
13 楼bokei(一夜好眠)回复于 2001-07-12 17:41:01 得分 0
用队列暂存串口读出来的数据.
Delphi里有TQueue这个类.
Top
14 楼MrGun(甘)回复于 2001-07-12 19:13:49 得分 0
建议用两个线程,一个读,一个写,中间用一个TList将数据保存下来,这样不会造成数据混乱Top
15 楼asili(吃饱了-撑着)回复于 2001-07-12 21:28:31 得分 0
请Hillside()帮忙,请去http://www.csdn.net/expert/topic/192/192170.shtm 拿分
多谢各位的回答,我出100分请多提建议,Top
16 楼asili(吃饱了-撑着)回复于 2001-07-12 22:20:14 得分 0
我用单线程,串口数据较慢时还可以,串口输入数据很快时,每秒>5,程序很容易挡住,因为一台PC上加了8把读马枪,数据时多时少,用多线程可以避免挡住吗?我没有经验。。。Top




