求救!delphi多线程入门问题

ctjtn 2013-07-10 09:36:32
写了个多线程实例,主要代码如下:
TMyThread1 = class(TMyThread)
protected
procedure Execute;override;
procedure SetPb;
private
i_ca:Integer;
end;
procedure TMyThread1.Execute;
begin
Synchronize(SetPb);
end;
procedure TMyThread1.SetPb;
var
i:Integer;
i_cata:Integer;
begin
i_cata:=i_ca;
if i_cata=1 then
begin
Form1.pb1.Min:=0;
Form1.pb1.Max:=10000;
Form1.pb1.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb1.StepBy(1);
end;
end else
begin
Form1.pb2.Min:=0;
Form1.pb2.Max:=10000;
Form1.pb2.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb2.StepBy(1);
end;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
m1: TMyThread1;
m2: TMyThread1;
begin
m1:=TMyThread1.Create(True);
m1.i_ca:=1;
m1.FreeOnTerminate := True;
m1.Resume();

m2:=TMyThread1.Create(True);
m2.FreeOnTerminate := True;
m2.i_ca:=2;
m2.Resume();
end;

想要实现的功能是点击按钮,两个主窗口的进度条同时跑,可我得到结果是一个一个依次运行的,为什么?
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctjtn 2013-07-10
  • 打赏
  • 举报
回复
现在解决了,是自己对Synchronize没搞懂,谢谢各位了,结帖了。
ctjtn 2013-07-10
  • 打赏
  • 举报
回复
引用 3 楼 bbc9527 的回复:
代码不全,全部都发上来吧。
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, SPComm, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    pb1: TProgressBar;
    pb2: TProgressBar;
    procedure btn1Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type
      TMyThread1 = class(TMyThread)
      protected
    procedure Execute;override;
       procedure SetPb;
       private
         i_ca:Integer;
     end;

procedure TMyThread1.Execute;
begin
    Synchronize(SetPb);
end;


procedure TForm1.btn1Click(Sender: TObject);
var
  m1:     TMyThread1;
    m2:      TMyThread1;
begin
 m1:=TMyThread1.Create(True);
 m1.i_ca:=1;
 m1.FreeOnTerminate := True;
 m1.Resume();

  m2:=TMyThread1.Create(True);
  m2.FreeOnTerminate := True;
  m2.i_ca:=2;
  m2.Resume();
end;

procedure TMyThread1.SetPb;
var
  i:Integer;
  i_cata:Integer;
begin
  i_cata:=i_ca;
  if i_cata=1 then
  begin
  Form1.pb1.Min:=0;
  Form1.pb1.Max:=10000;
  Form1.pb1.Position:=0;
  for i:=0 to 10000 do
  begin
    Form1.pb1.StepBy(1);
  end; 
  end else
  begin
     Form1.pb2.Min:=0;
     Form1.pb2.Max:=10000;
     Form1.pb2.Position:=0;
     for i:=0 to 10000 do
     begin
        Form1.pb2.StepBy(1);
     end;
  end;
end;
new_yang 2013-07-10
  • 打赏
  • 举报
回复
这个简单 我个人呢比较懒 给你贴个地址吧 人家大牛弄的 举一反三哦 http://www.cnblogs.com/del/archive/2009/02/11/1388700.html
bbc9527 2013-07-10
  • 打赏
  • 举报
回复
代码不全,全部都发上来吧。
ctjtn 2013-07-10
  • 打赏
  • 举报
回复
引用 1 楼 bbc9527 的回复:
代码只有线程1 procedure TMyThread1.Execute; begin Synchronize(SetPb); end; 这里用了同步,可能是这个原因
不懂,还有线程运行时,主窗口都被锁定了,我以前用C#不会这样啊,这是哪里的问题呢
bbc9527 2013-07-10
  • 打赏
  • 举报
回复
代码只有线程1 procedure TMyThread1.Execute; begin Synchronize(SetPb); end; 这里用了同步,可能是这个原因
已经博主授权,源码转载自 https://pan.quark.cn/s/008193215f29 在处理英文PDF文献进行阅读和翻译的过程中,常常会碰到一个挑战:文档内的换行标记可能干扰翻译的精确度。 这一现象的产生源于谷歌翻译等在线翻译服务在解析含换行符的内容时,常将其错误地解读为语句的终止点,进而引发翻译结果的偏差。 为了应对这一难题,我们可以运用若干实用策略来改善翻译流程。 下面介绍一种行之有效的方法:首先,需要将英文PDF文献中的文字信息进行复制。 这一操作可以通过两种途径实现:1. 利用PDF转WORD软件:众多第三方应用程序例如Adobe Acrobat或在线转换平台,能够协助我们将PDF资料转化为Word文档,从而获取无换行符的纯文本格式。 2. 直接从PDF文档提取:倘若PDF文件具备编辑属性,用户可以选取文本并执行复制动作,尽管这种方式有时仍会保留换行符,但后续可进行相应处理。 随后,建议采用WPS Office(国产办公应用)进行深入编辑。 WPS具备卓越的文本处理能力,可协助我们清除换行标记并优化段落布局。 具体操作步骤如下:1. 下载并安装WPS Office。 若个人电脑尚未安装该软件,可从其官方网站获取并完成安装流程。 2. 启动WPS的文字编辑模块。 在WPS中创建一个新文档,并将从PDF复制的文本粘贴至其中。 3. 在WPS的界面顶部,定位“开始”功能键,并点击进入。 4. 在“开始”功能区下,查找“文字工具”选项。 此功能集合提供了多种实用工具,有助于解决各类文本难题。 5. 在“文字工具”内,识别“删除空格”功能。 此步骤旨在移除文本中的所有空白字符,包括由换行产生的额外空格。 6. 继续选择“段落重排”功能。 该操作将依据实际语境自动调整文本的分句方式,确保每个句子的完整...

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧