如果你的线程干完了自己的事情可以向主线程发个消息,用SendMessage
如果想强行关闭可以用TerminateThread
如果想强行关闭可以用TerminateThread
解决方案 »
- delphi程序窗体和控件 如何适应1440x900分辨率?
- 关于从BDE中的table转换成ado中的adotable的FindNearest属性
- 有数据库ERPDATA_Data.MDF,ERPDATA_Data.LDF(内有很多资料,非空)文件,如何在DELPHI程序,直接在装有sqlserver2000的电脑上让它产生ERP
- 如何在应用程序中实现delphi控件的移动,就像设计阶段一样。
- 初学编程,注册表求助?100分
- 怎麼樣把*.csv轉換成*.xls文件?
- 如何向大表添加可能存在的记录
- DBcombobox问题!
- 请问,在TreeView控件中有没有选中事件也就是当前接点选中,而不是onclick
- 可以在StringGrid中加入进度条吗?
- 奇怪!~ 为什么没钱了通过新浪还可以发短信信? 他们不是同一个网?
- 杨七郎 看招!
mythread.Terminate;
if not mythread.Terminated then
mythread.Terminate;
根本就编译不过
我是想在窗口的关闭事件中判断线程是否在执行如果还在执行则结束..
begin
if (mythread[i] <> nil) and (not mythread[i].Terminated) then
begin
mythread[i].Terminate;
FreeAndNil(mythread[i]);
end;
end;MyThreadCount,和mythread数组都就在类成员,在建立线程时将线程对象的指针保存到mythread数组,用MyThreadCount记录线程的个数要注意线程对象的FreeOnTerminate应为False,否则这样写可能是会出异常的
for i := 0 to MyThreadCount-1 do.........
那到那去找线程对像....
??
function ThreadProc(Parameter: Pointer): Integer; stdcall;
begin
// thread loop;
//从thread loop退出后,线程就完了,简单吧。:)
end;buttononlick
var
ThreadID: DWORD;
ThreadHandle: THandle;
begin
//参数不知打对没
ThreadHandle := CreateThread(nil, 0, @ThreadProc, nil, ThreadID);
//ThreadHandle没有用到,所以关了它
CloseHandle(ThreadHandle);
end;
还有我用的是delphi自带的thread对象..
一般来说在那里都是
procedure TMyThread.Execute;
begin
while not Terminated and (你程序用的条件) do
// loop
end;这样做一般用thread.teminiate可以中止的,
不过就怕你的loop中又有一个loop,又一个waitfor,那么thread.terminiate就没什么用了。
可是当我的线程没有终止时,有人直接就关闭程序就会出现异常了所以我想在close事件中能判断一下如果线程在执行则关闭..
我的线程名字叫sockthread语句这样编译也不过:sockthread.terminated:=true;
如:
var
aThread: TMyThread;
aThread := TMyThread.Create(.......0;aThread就是线程对象呀,它是TMyThread类的对象,或者,就类的实例更贴切一点吧! 可参考面向对象的相关理论!
另外, aThread实际上是个指针,所以有时也叫对象指针!你保存了线程对象后,就可随时对线程对象做任何操作了!
你太聪明了
谢谢^_^