【发布时间】:2014-07-26 20:04:13
【问题描述】:
我想通过单击按钮来终止线程。如果线程在没有用户中断的情况下正常工作是可以的,但有时用户需要中止线程,这就是用户如何中止线程的问题。
这是我测试的代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, mmsystem, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;
type
hangth = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure play;
end;
var
Form1: TForm1;
played: boolean;
szalhang: hangth;
implementation
{$R *.dfm}
procedure hangth.play;
begin
played := true;
szalhang.Terminate;
end;
procedure hangth.Execute;
begin
played := false;
SndPlaySound(pchar('hang.wav'), SND_SYNC);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
played := true;
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
if played = true then begin
szalhang := hangth.Create(true);
szalhang.Resume;
end else begin
szalhang.Terminate();
// here i want to terminate thread, but it doesn't want to be killed.
end;
end;
end.
【问题讨论】:
-
但我们仍然不知道问题是什么。 “直接在线程外终止线程”是什么意思?
-
我想通过单击按钮来终止线程。如果线程在没有用户中断的情况下正常工作是可以的,但有时用户需要中止线程,这就是用户如何中止线程的问题。
-
好的,这是一个好的开始。但是你能修复上面的代码以便编译吗?你说它有效,但我们都看到了它无效的证据。
-
代码已重新附加。现在可以编译了。
-
它没有编译,我做了修复让它编译并为你清理它。现在你能更清楚一点它是如何不工作的吗?它做了什么/没有做什么是你意想不到的?
标签: multithreading delphi kill