2011-07-13 43 views
2

从Matlab GUI应用程序中,我启动了一个外部程序(Windows上的控制台应用程序),负责从测量系统读取数据。只要外部程序完成,数据就会存储在由Matlab应用程序处理的多个文件中。问题是这样的:从Matlab GUI内发送SIGINT

当在命令行上运行外部程序时,可以通过发出SIGINT(即按Ctrl + C)来正常停止。信号处理程序捕获SIGINT并关闭程序。有没有一种方法可以在Matlab GIU应用程序中通过按下“中止”按钮来完成此操作?

经过许多小时的搜索,我偶然发现了http://www.caam.rice.edu/~wy1/links/mex_ctrl_c_trick/,它显示了如何检测MEX文件中的SIGINT。让MEX打电话给外部程序可能会起作用(尽管我还不确定细节)。但是,它仍然需要Ctrl + C来停止程序。我如何通过GUI中的按钮发送SIGINT信号?

+1

你见过http://stackoverflow.com/questions/813086/can-i-send-a-ctrl-c-sigint-to-an-application-on-windows?你确实说过你在Windows下,对吗? –

+0

[Matlab:实现CTRL + C做什么,但在代码中]的可能重复(http://stackoverflow.com/questions/10033078/matlab-implementing-what-c​​trlc-does-but-in-the-code) – Jonas

回答

0

如果你在cygwin开始你的外部程序,那么cygwin会给它一个pid。使用此pid可以使用cygwins kill命令将信号发送到进程。所以从cygwin开始这个程序。在Matlab中,您可以使用!ps(其中!表示调用外部shell命令)获取cygwin pid的列表,然后使用!kill -s signal pid向程序发送信号。为了使它从Matlab GUI发生,让一些按钮调用!回调。