1

我有一个用 mcc 创建的可执行文件。.m 文件有一个简单的函数,可以读取和绘制值。在我从 DOS 运行它之后,它会冻结而不会将执行返回到 DOS。2个问题:1)如何将执行返回到dos?我试过“return”和“exit”命令但没有帮助 2)如何关闭dos窗口?是使用批处理文件的唯一方法还是可以使用 .m 文件中的命令来完成?谢谢。

4

1 回答 1

2

有2个场景:

如果您从 DOS 窗口运行 matlab 可执行文件,则在程序终止之前,DOS 窗口将无法获得控制权。如果程序生成 matlab 图形(绘图、冲浪等),则程序将不会返回控制台,直到所有图形都关闭。

你可能认为这对于一个简单的情节来说是一种浪费,但毕竟你的人物可能是一个进化的 gui,有很多代码要执行。甚至是一个带有closeRequestFcn. 因此,在 Matlab 术语中,只要打开一个图形,您的程序可能仍有要执行的指令,因此它不会返回,直到它确定没有更多可做的事情。

如果您只是双击您的可执行文件,与您的程序一起打开的 DOS 外观控制台将具有相同的行为。在程序返回之前它不会消失(所以直到所有相关的数字都关闭)。

我不确定 linux 的版本,但如果你在 Windows 上运行,有一种方法可以抑制图形应用程序的 DOS 控制台。查看选项中的-e开关mcc。此开关将以双击可执行文件时不打开 DOS 控制台的方式编译程序。

所以总结一下,我建议:

  • 如果您的程序是“命令行”类型(从控制台获取输入并将值返回到相同的函数)。=> 使用普通选项编译,并从 DOS 窗口执行它(您不希望程序终止后窗口立即消失。)

  • 如果你的程序是 gui甚至是简单的绘图函数,不需要控制台交互,那么使用-eswitch 编译并通过双击 .exe 文件执行它。

请注意,如果您使用-e开关,建议将潜在输出定向到日志文件。查看mcc文档以获取更多信息。


编辑 如果您确实需要 DOS 控制台和一些图形输出,请使用以下语法从命令窗口运行您的程序:

start /b YourProgram 

这将以“后台模式”启动程序(在 Linux 终端中使用YourProgram &)。您将能够在此控制台窗口中执行任何操作,并且您还将看到 matlab 可执行文件的输出。

这可能会令人困惑,因为您的程序的输出将被添加到简单的 dos 提示符中,您可能认为您没有控制权,但如果您键入任何命令,它就会起作用。您甚至可以以这种方式启动许多程序并在控制台中保留控制权,但是所有输出都将到达同一个窗口,并且可能难以区分。

于 2014-10-23T13:41:30.923 回答