■■■ 如何立刻终止一个正在执行的线程?■■■ (100分)

  • 主题发起人 主题发起人 swhl
  • 开始时间 开始时间
S

swhl

Unregistered / Unconfirmed
GUEST, unregistred user!
请问高手们:如何立刻终止一个正在执行的线程?Terminateit好象不能立刻终止线程。该如何做????????
 
中止线程啊,给出两个不推荐的API,超级杀手:
EndThread
CloseHandle(他最狠了)
 
只需要:
YourThread.Terminate;
即可;
 
HD:=CreateThread(nil,0,@TFrm_LoadText.LoadTrd_LoadData,nil,0,Thread1);
……
ExitThread(HD)
 
findwindow找出线程Handle,
CloseHandle终止。
var
WindowName : integer;
ProcessId : integer;
ThreadId : integer;
HandleWindow : Integer;
const
WindowTitle = 'aaa';
begin
WindowName := FindWindow(nil,WindowTitle);
If WindowName = 0 then
Exit;
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
closehandle(HandleWindow);
end;

 
强行退出线程,总是不大好的。可以在线程体中设置一个判断,比如静态变量exitThread,如果为ture,则退出线程主循环。你在别的函数中将exitThread置为true,则线程体判断后,根据你的设置,自动退出。
 
同意楼上的意见,要停止一个线程最好让线程自己根据某个条件结束,这样你还可以做很多线程结束前应该做的动作(如:释放线程中创建的对象)。
 
VOID ExitThread( // 退出当前线程
DWORD dwExitCode
);
BOOL TerminateThread( // 结束指定线程
HANDLE hThread,
DWORD dwExitCode
);
非特殊情况下不建议这么做
 
借楼主的地方问一下:
如果线程正在执行一个原子操作,而这部操作花费时间很长,那么应该怎么结束线程,又能保证资源释放呢? 小弟碰到一个 ADOQuery在执行某个查询时,毫时很长。
 
myThread.stop(true);
 
后退
顶部