如何强制结束线程?(50分)

  • 主题发起人 主题发起人 leo_zzz
  • 开始时间 开始时间
L

leo_zzz

Unregistered / Unconfirmed
GUEST, unregistred user!
建立一个线程 Tzzz
执行部分只写了
procedure Tzzz.Execute;
begin

{ Place thread code here }
PlaySound('sound', hInstance, SND_RESOURCE or SND_SYNC);
end;

'sound'是一首歌,较长,集成在exe的资源文件中。
在form1中:
procedure TForm1.FormCreate(Sender: TObject);
begin

zzz:=Tzzz.Create(false);
end;


如果在歌曲没有播放完毕的时候,我想结束程序,
procedure TForm1.Button1Click(Sender: TObject);
begin

zzz.Suspend;

zzz.Free;
form1.Close;
end;

可是效果不好:程序死掉,歌曲接着播放。

请问咋回事?怎么解决呢,谢谢啦!!!
 
PlaySound()其中有几个值给个nil就可以关掉了,具体看MSDN,不用线程的,开销太大
 
PlaySound('sound', hInstance, SND_RESOURCE or SND_ASYNC);
~~~~~~~~~
要这样改一下,你的做法是必须要等到声音播放完,才执行下面的语句,我现在的做法是异步的,
只要声音开始播放,就返回,也就是可以执行下面的语句了
 
我改成了
PlaySound('sound', hInstance, SND_RESOURCE or SND_ASYNC);

可是还是有那个问题:

关掉程序,歌曲仍然在播放,直到完全放完,怎么能让音乐播放与程序同时结束呢??
 
这次我没有用线程
 
不用线程,看看MSDN的说明
pszSound
Pointer to a null-terminated string that specifies the sound to play.
If this parameter is NULL, any currently playing waveform sound is stopped.
~~~~~~~
在程序关闭时再调用一次playsound,其中pszSound设为空,就可以停止。
还有就是小笨笨说的了。
 
我第一个回复的帖子里就说了...自己不看???
 
要这么写吗??

PlaySound( null,hInstance, SND_RESOURCE or SND_ASYNC);

不行啊,我是菜鸟,真的不太懂。。。
 

Similar threads

后退
顶部