关于多线程的问提?(100分)

  • 主题发起人 billhang
  • 开始时间
B

billhang

Unregistered / Unconfirmed
GUEST, unregistred user!
本人想做一个多线程的PROGRAM,一个线程读数据,一个线程着数据处理,一个做数据写去。
问题是在做这个关于流水操作,线程间是怎样传第数据?
由于这个数据量挺大的,所以用多线程的方法比单线程的方法能否提高速度?
 
>问题是在做这个关于流水操作,线程间是怎样传第数据?
用同一个数组,但是要另加一个开关变量来识别当前是那个线程在工作
delphi自己带有一个例子,你好好看看!!!
>由于这个数据量挺大的,所以用多线程的方法比单线程的方法能否提高速度?
由于线程要花费系统资源,应该不会提高速度的
 
使用指针变量共享数据,但要设计好'临界区域';
 
Delphi多线程程序共有三种方式对临界区保护:
1、阻塞。2、信号量。比较适合这种情况。信号量技术比较适合,但是我使用的经验。
不知为什么不太好使。
 
你的程序数据是从哪读出来的?串口?TCP/IP端口,还是其他?速度是多少?
你的程序数据计算是分批计算的还是累计计算的?(当前计算的数据和结果与下次计算是不是有联系?)
我以前做过串口提取数据、计算、存储的程序,计算量不大。
提数据用一个线程,另一个线程计算存储。
计算存储线程一般处于等待状态,当数据到齐后计算存储。
接收数据线程收到一笔数据后,通过设置信号,通知计算存储线程计算,然后继续接收数据
此时计算存储线程收到信号后开始对数据进行处理。
如果数据处理时间大于接收一笔数据的时间,设置缓冲区,或提高机器性能。
 
最简单的就是全局变量。使用临界区,Mutex等进行互斥访问。
如用TThread访问非线程安全的VCL控件,使用Synchronize(VistVCL)
方法(VistVCL是访问VCL的过程)。
 
Thank all!!!
 
顶部