为了账号安全,请及时绑定邮箱和手机立即绑定

如何正常使用c ++ / c#/ vc ++终止另一个应用程序?

如何正常使用c ++ / c#/ vc ++终止另一个应用程序?

C#
慕工程0101907 2021-05-02 09:10:28
我有一个运行无限循环并在该循环中执行一些重要功能的应用程序。我需要为用户提供另一个应用程序,该应用程序将无限循环地终止该应用程序。问题是,如果用户在循环内执行某些操作时终止了该应用程序,该怎么办?这将导致状态不一致。我尝试了kill()和TerminateProcess,但是它们没有帮助。我有什么方法可以用无限循环向应用程序发出信号,以完成您的迭代并退出?我愿意使用c#,cpp和vc ++解决方案。编辑:可访问循环程序的源代码。
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

运行无限循环并执行一些重要功能的应用程序

只要它具有“重要功能”,所讨论的程序就具有从某处(例如,从文件或从网络套接字)获得新的输入数据的方式。因此,您可以在输入数据中添加一个特殊的令牌,其含义为“操作结束”。收到此类令牌后,程序将知道该关闭自身了。这种性质的最简单的标记之一是常规文件或远程套接字关闭的文件结束。

我刚刚描述的方法很简单,就是所谓的“带内控制通道”。也就是说,您使用单个通道来馈送要处理的数据和要控制的命令(即使只有一个命令“停止”)也是如此。

替代方法是“带外控制通道”,即在应用程序之间传递命令的第二个通道。

问题是,如果用户在循环内执行某些操作时终止了该应用程序,该怎么办?这将导致状态不一致。

您尝试使用的方法kill是使用被称为进程间信号的设施的一种可能性。为了正确使用它,接收程序必须注册一个信号处理程序例程以自行启动关机。发送方应使用匹配的信号编号。使用kill(POSIX中的SIGKILL)不是最佳选择,因为它具有特殊的行为并且不能分配有自定义信号处理程序。在POSIX中,最好使用SIGUSR1或许多其他信号之一。我不记得它的本机Windows等效项。

有多种机制可以组织常规操作系统中进程之间的处理器间通信,请参阅Wikipedia到完整列表,其中包括从共享文件到命名管道和网络套接字的所有内容。选择一种最适合您的需求。您只需要传递一点数据,因此基本上最容易编程的数据就是最好的。


查看完整回答
反对 回复 2021-05-08
  • 2 回答
  • 0 关注
  • 286 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信