关于这个简单的多线程代码-求解几个小问题
关于这个简单的多线程代码----求解几个问题
大虾帮看看,谢了..
以下是示例代码,是关于文件压缩的,当文件多的时候,运行for循环时,
CPU就会100%,我在Click事件后加上MyThread,好像好一点点.
请问:
1.这样的多线程安全吗?
2.ProgressBar1是用多线程运了吗?
3.请问如果要让下面的代码,在窗口一显示后ProgressBar1才从0开始执行,如何改?
为什么下面的代码我放到FormShow下的话,一运行到完了直接显示进度条到100%?
------解决思路----------------------
这也叫多线程。。。。
你要设计一个线程类,从TThread继承,覆盖它的execute方法,在这个方法里运行你的处理过程
------解决思路----------------------
不要在线程里直接操作主线程上的可视控件,极不安全。
比较简单的做法是:在你的线程类里增加个MsgHandle,用来记录主线程的句柄,在Execute过程中可以用postmessage来向主界面反馈执行进度。
------解决思路----------------------
线程中调用主界面VCL要用同步函数Synchronize
大虾帮看看,谢了..
以下是示例代码,是关于文件压缩的,当文件多的时候,运行for循环时,
CPU就会100%,我在Click事件后加上MyThread,好像好一点点.
请问:
1.这样的多线程安全吗?
2.ProgressBar1是用多线程运了吗?
3.请问如果要让下面的代码,在窗口一显示后ProgressBar1才从0开始执行,如何改?
为什么下面的代码我放到FormShow下的话,一运行到完了直接显示进度条到100%?
procedure TInformForm.AddfileClick;
var
MyThread:TThread;
i: integer;
begin
MyThread:=TThread.Create(true); //建立线程
MyThread.FreeOnTerminate :=True;
for i := 1 to 6000 do //6000个文件
begin
ProgressBar1.StepBy(1);
{略...}
end;
end;
------解决思路----------------------
这也叫多线程。。。。
你要设计一个线程类,从TThread继承,覆盖它的execute方法,在这个方法里运行你的处理过程
------解决思路----------------------
不要在线程里直接操作主线程上的可视控件,极不安全。
比较简单的做法是:在你的线程类里增加个MsgHandle,用来记录主线程的句柄,在Execute过程中可以用postmessage来向主界面反馈执行进度。
------解决思路----------------------
线程中调用主界面VCL要用同步函数Synchronize