-1
버튼을 클릭하여 스레드를 종료하고 싶습니다. 쓰래드가 사용자 인터럽트없이 정상적으로 작동한다면 괜찮습니다.하지만 사용자가 쓰레드를 중단시켜야 할 때가 있습니다. 이것이 사용자가 쓰레드를 중단시키는 방법입니다.델파이에서 스레드 외부에서 직접 스레드를 종료 할 수 있습니까?
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.
을 그럼에도 불구하고 우리는 여전히 문제가 무엇인지 모르는 : 당신은
TForm
을 가지고, 당신은 예를 들어, 델파이의TMediaPlayer
구성 요소를 사용하는 것이 좋습니다. "스레드 외부의 스레드를 직접 종료"하는 것은 무엇을 의미합니까? –버튼을 클릭하여 스레드를 종료하고 싶습니다. 쓰래드가 사용자 인터럽트없이 정상적으로 작동한다면 괜찮습니다.하지만 사용자가 쓰레드를 중단시켜야 할 때가 있습니다. 이것이 사용자가 쓰레드를 중단시키는 방법입니다. – user3880482
좋습니다. 좋은 시작입니다. 하지만 위의 코드를 수정하여 컴파일 할 수 있습니까? 당신은 그것이 효과가 있다고 말하는데, 우리 모두는 그것이 효과가 없다는 증거를 보았습니다. –