资料来源:CSDN中的技术天地的博客
用一个线程来实现这个功能1:变量i从0--40000来循环改变一个label1的值,值和i的值一样
然后不用线程也实现这个label2的显示功能2
如何把功能1和功能2同时进行?
1.
2.
3.
4.
5.
下面的是主程序
unit Unit1;
interface
uses
type
var
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
begin
end;
end.
以下是线程单元代码,Excute是线程单元的入口函数
unit Unit2;
interface
uses
type
implementation
procedure CTestThread.Execute;
begin
end;
procedure CTestThread.Test;
var
begin
end;
end.
1. 我知道TMsgThread.Create(True)这样可以创建一个线程,如果参数为true,线程创建但不执行。
否则,如果是false,创建并且执行线程。
2. FreeOnTerminate:=true;线程执行完毕以后就自动释放了
3. 线程创建很消耗资源。所以如果定时要执行线程的代码,就不要把它释放。
基于以上的考虑,我对下面的代码是这样使用的。
{线程类定义}
TMsgThread = class(TThread)
procedure TWeather.Execute;
begin
end;
{主程序}
var
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
end;
线程同步问题
1. 哪些东西要用同步Synchronize? 我知道可视化组件不支持是都不支持吗?
2.
我的项目是收到数据用线程1处理保存,如果电脑快速收数据,我的的线程1基本上都用到可视化组件(adoquery/spcomm)也就是都要用Synchronize保护吧?
3. 如果我想提高速度是不是用多套组件好一些,比如adoquery1、2、3
当收到数据加上一个序号地,运行线程时如果mod3=0、1、2就用不同的adoquery?
和界面GUI有关的时候用Synchronize.
ADOQuery并不是可视控件,所以也用不到。
线程在执行一个长时间的操作/循环时使用,如果是收数据的速度很快,保存数据的速度相对慢的话,最主要的不是用几个ADOQuery而是如何将这发来的数据快速接收。你的串口一秒能来多少数据呀!
要不还是开一个缓冲区,将串口来的数据全部先保存到缓冲区中,然后开一个线程,线程时创建一个ADOQuery将缓冲区数据保存。这样你的数据来的在快也没有关系了。
|
|