2011-07-13 46 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發生,讓一些按鈕調用!回調。