| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1076 人关注过本帖
标题:关于多线程控制的一些问题
只看楼主 加入收藏
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:6 
关于多线程控制的一些问题
为什么暂停线程时还是会执行的,不会暂停,,刚开始接触线程,不太懂,
请大家指定一下,

procedure TTestThread.Execute;
begin
  self.FreeOnTerminate := True;
  Synchronize(SetValue);
end;

procedure TTestThread.SetValue;
var
  i: Integer;
begin
  for i := 0 to 100000 do
  begin
    Application.ProcessMessages;
    if self.Terminated then Break;
    form1.Edit1.Text := IntToStr(i);
  end;
end;


//开始线程
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyThread := TTestThread.Create(True);
  mythread.Resume;
end;

//暂停线程
procedure TForm1.Button2Click(Sender: TObject);
begin
  MyThread.Suspend;
end;

//终止线程
procedure TForm1.Button3Click(Sender: TObject);
begin
  MyThread.Terminate;
end;

//继续执行线程
procedure TForm1.Button4Click(Sender: TObject);
begin
  MyThread.Resume;
end;
搜索更多相关主题的帖子: 线程 
2010-03-01 13:18
mohao163
Rank: 5Rank: 5
来 自:南宁
等 级:职业侠客
威 望:2
帖 子:79
专家分:383
注 册:2009-9-25
收藏
得分:0 
MyThread 你是在哪声明的?  还是MyThread 就是你的thread类。  你声明下MyThread:TMyThread ;然后用个integer记录下handle,对这个线程操作的话应该是可以暂停的
2010-03-02 09:15
s912360101
Rank: 3Rank: 3
来 自:山西
等 级:论坛游侠
帖 子:168
专家分:147
注 册:2009-3-15
收藏
得分:0 
强悍,学习中~~~~

孤独是一个人的狂欢
2010-03-02 21:45
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
收藏
得分:0 
MyThread是跟主窗体同在一个单元,
///////////////////////////////////
// 线程类
type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  public
end;
/////////////////
//窗体类
type
  TForm1 = class(TForm)
  private
    MyThread: TMYThread;
  public
    ........
end;

结构就是上面那样,

2010-03-03 10:44
mohao163
Rank: 5Rank: 5
来 自:南宁
等 级:职业侠客
威 望:2
帖 子:79
专家分:383
注 册:2009-9-25
收藏
得分:20 
thread.rar (160.6 KB)


unit Unit1;

interface

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

type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
    procedure SetValue;
  public
end;

type
  TMyThread2 = class(TThread)
  protected
    procedure Execute; override;
  public
end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Edit2: TEdit;
    Edit1: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
  private
    { Private declarations }
     MyThread: TMyThread;
     MyThread2: TMyThread2;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyThread.Execute;
begin
  FreeOnTerminate := True;
  Synchronize(SetValue);
end;

procedure TMyThread.SetValue;
var
  i: Integer;
begin
  for i := 0 to 100000 do
  begin
    Application.ProcessMessages;
    if self.Terminated then Break;
    form1.Edit1.Text := IntToStr(i);
  end;
end;

procedure TMyThread2.Execute;
var
  i: Integer;
begin
  FreeOnTerminate := True;
  for i := 0 to 100000 do
  begin
    Application.ProcessMessages;
    if self.Terminated then Break;
    form1.Edit2.Text := IntToStr(i);
  end;
end;


//开始线程
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyThread := TMyThread.Create(false);
end;

//暂停线程
procedure TForm1.Button2Click(Sender: TObject);
begin
  MyThread.Suspend;
end;

//终止线程
procedure TForm1.Button3Click(Sender: TObject);
begin
  MyThread.Terminate;
end;

//继续执行线程
procedure TForm1.Button4Click(Sender: TObject);
begin
  MyThread.Resume;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  MyThread2 := TMyThread2.Create(false);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  MyThread2.Suspend;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  MyThread2.Terminate;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  MyThread2.Resume;
end;

end.
Synchronize这个是线程同步的方法,其作用是在主线程中执行Synchronize()中的函数;你自己可以体会下
2010-03-03 12:31
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
收藏
得分:0 
明白了,,非常感谢mohao163提供的答案,

2010-03-03 14:11
hhf2010
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-11-13
收藏
得分:0 
http://taobao.
http://taobao.

使用本部件后,可以十分方便快速的开发多线程应用程序,无需按常规的繁琐方法建立多线程。建立N多个线程仅需两步!。简单好用才是我们需要的,请大家看使用方法:

2010-11-13 10:43
快速回复:关于多线程控制的一些问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042324 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved