我有一个用 mcc 创建的可执行文件。.m 文件有一个简单的函数,可以读取和绘制值。在我从 DOS 运行它之后,它会冻结而不会将执行返回到 DOS。2个问题:1)如何将执行返回到dos?我试过“return”和“exit”命令但没有帮助 2)如何关闭dos窗口?是使用批处理文件的唯一方法还是可以使用 .m 文件中的命令来完成?谢谢。
1 回答
有2个场景:
如果您从 DOS 窗口运行 matlab 可执行文件,则在程序终止之前,DOS 窗口将无法获得控制权。如果程序生成 matlab 图形(绘图、冲浪等),则程序将不会返回控制台,直到所有图形都关闭。
你可能认为这对于一个简单的情节来说是一种浪费,但毕竟你的人物可能是一个进化的 gui,有很多代码要执行。甚至是一个带有closeRequestFcn
. 因此,在 Matlab 术语中,只要打开一个图形,您的程序可能仍有要执行的指令,因此它不会返回,直到它确定没有更多可做的事情。
如果您只是双击您的可执行文件,与您的程序一起打开的 DOS 外观控制台将具有相同的行为。在程序返回之前它不会消失(所以直到所有相关的数字都关闭)。
我不确定 linux 的版本,但如果你在 Windows 上运行,有一种方法可以抑制图形应用程序的 DOS 控制台。查看选项中的-e
开关mcc
。此开关将以双击可执行文件时不打开 DOS 控制台的方式编译程序。
所以总结一下,我建议:
如果您的程序是“命令行”类型(从控制台获取输入并将值返回到相同的函数)。=> 使用普通选项编译,并从 DOS 窗口执行它(您不希望程序终止后窗口立即消失。)
如果你的程序是 gui甚至是简单的绘图函数,不需要控制台交互,那么使用
-e
switch 编译并通过双击 .exe 文件执行它。
请注意,如果您使用-e
开关,建议将潜在输出定向到日志文件。查看mcc
文档以获取更多信息。
编辑 如果您确实需要 DOS 控制台和一些图形输出,请使用以下语法从命令窗口运行您的程序:
start /b YourProgram
这将以“后台模式”启动程序(在 Linux 终端中使用YourProgram &
)。您将能够在此控制台窗口中执行任何操作,并且您还将看到 matlab 可执行文件的输出。
这可能会令人困惑,因为您的程序的输出将被添加到简单的 dos 提示符中,您可能认为您没有控制权,但如果您键入任何命令,它就会起作用。您甚至可以以这种方式启动许多程序并在控制台中保留控制权,但是所有输出都将到达同一个窗口,并且可能难以区分。