怎样强制彻底结束一个应用程序? ( 积分: 26 )

  • 主题发起人 主题发起人 wishme1
  • 开始时间 开始时间
W

wishme1

Unregistered / Unconfirmed
GUEST, unregistred user!
多线程程序,有时应用程序主窗口关闭了,但在任务管理器的进程中该程序仍然在运行,怎样强制彻底结束该应用程序?
在主窗口的form1.onclose中
Application.Terminate;
没用,有时还会出现“值不能为空”的错误提示,怎么也找不到是哪里引起的错,很郁闷
谁能告知这种情况怎么强制结束应用程序?如果有遇到“值不能为空”的错误提示那就也说一下,我是用
indy的TcpServer控件接收数据的程序
 
多线程程序,有时应用程序主窗口关闭了,但在任务管理器的进程中该程序仍然在运行,怎样强制彻底结束该应用程序?
在主窗口的form1.onclose中
Application.Terminate;
没用,有时还会出现“值不能为空”的错误提示,怎么也找不到是哪里引起的错,很郁闷
谁能告知这种情况怎么强制结束应用程序?如果有遇到“值不能为空”的错误提示那就也说一下,我是用
indy的TcpServer控件接收数据的程序
 
先把线程中止
 
给你一个关闭进程的函数
//杀死进程
function TForm1.Kill_Task(ExeFileName: string):integer;
const
PROCESS_TERMINATE=$0001; //进程的PROCESS_TERMINATE访问权限
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result:= 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //获取系统所有进程快照
FProcessEntry32.dwSize := Sizeof(FProcessEntry32); //调用Process32First前用Sizeof(FProcessEntry32)填充FProcessEntry32.dwSize
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32); //获取快照中第一个进程信息并保存到FProcessEntry32结构体中
while integer(ContinueLoop) <> 0 do //循环枚举快照中所有进程信息
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(ExeFileName))) then //找到要中止的进程名
Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0)); //中止进程
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32); //查找下一个符合条件进程
end;
end;
 
线程无法一一中止
 
谁能帮一下!
怎样把IdTcpServer所产生的线程全结束掉?
 
后退
顶部