怎样立即结束后台进程

gao277 2002-05-30 10:15:40
需要在外进程结束内进程,因为内进程平时一直在后台采集数据,我想在外进程立即结束,用terminate结束,可非要等它采完了一遍数据才行,不能够立即结束,怎么办?
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjqyb 2002-05-30
  • 打赏
  • 举报
回复
execute :
while (not Terminated) do
{


}



gao277 2002-05-30
  • 打赏
  • 举报
回复
那样子不是立即结束啊!它是等做完了ttest.execute中的事件才结束的,如果
ttest.execute中的事件要做很长的时间,例如5分钟,那样子就不是实时结束了。
短歌如风 2002-05-30
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
with TTest.Create(false) do
begin
FreeOnTerminate := true;
sleep(1000);
ShowMessage('Terminating');
TerminateThread(Handle,0);
ShowMessage('Terminated');
end;
end;
没有报错呀!
gao277 2002-05-30
  • 打赏
  • 举报
回复
说错了,是在delphi中结束线程,用TerminateThread(TheThread.Handle,0)
这个函数会报错,错误为project project1.exe raised exception class
EAccessviolation with message 'access violation at address 0441ed3
in modile project1.exe
netlib 2002-05-30
  • 打赏
  • 举报
回复
用这个试试。
SendMessage(FMainForm.Handle,WM_Exit,0,0)
Billy_Chen28 2002-05-30
  • 打赏
  • 举报
回复
如果是线程就用:TerminateThread(TheThread.Handle,0);
Billy_Chen28 2002-05-30
  • 打赏
  • 举报
回复
uses tlhelp32;
假设要终止的名为:project2.exe,那么例程如下:
var
lppe:tprocessentry32;
sshandle:thandle;
hh:hwnd;
found:boolean;
begin
sshandle:=createtoolhelp32snapshot(TH32CS_SNAPALL,0);
found:=process32first(sshandle,lppe);
while found do
begin
//进行你的处理其中lppe.szExefile就是程序名。
if uppercase(extractfilename(lppe.szExeFile))='PROJECT2.EXE' then
begin
hh:=OpenProcess(PROCESS_ALL_ACCESS,true,lppe.th32ProcessID);
TerminateProcess(hh,0);
end;
found:=process32next(sshandle,lppe);
end;
end;
********************
HANDLE hProcess
Windows NT/2000: The handle must have PROCESS_TERMINATE access.
For more information, see Process Security and Access Rights.

所以要先使用
DWORD SetSecurityInfo(
HANDLE handle, // handle to object
SE_OBJECT_TYPE ObjectType, // object type
SECURITY_INFORMATION SecurityInfo, // buffer
PSID psidOwner, // new owner SID
PSID psidGroup, // new primary group SID
PACL pDacl, // new DACL
PACL pSacl // new SACL
);

短歌如风 2002-05-30
  • 打赏
  • 举报
回复
用terminate结束?你是说线程吧?
调用API:
TerminateThread(TheThread.Handle,0);

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧