我的MATLAB脚本中有一个mex文件。 mex函数可能需要一段时间才能运行,因此,为了防止我的代码“在没有任何输出的情况下停下来”,我在mex文件中放置了许多printf语句,以输出有关正在处理的数据的一些运行信息。

但是,当我调用mex函数时,它并没有printf任何东西,并在int运行期间停留在那里。最后,完成工作后,它将对我想要的所有信息进行printf编码-不是在运行时而是在完成后。这不是我想要的。

因此,我想知道如何不仅使printf成为我想要的东西,而且使printf成为我想要的东西。

最佳答案

是的,您需要mexPrintf。但是请注意,命令窗口不会强行刷新其使用的缓冲区,通常会导致打印消息之前很长的延迟。如果您在调用mexPrintf之后开始大量计算,则会发生这种情况。

解决方法是使用

mexEvalString("drawnow;")

在每次调用mexPrintf之后。

如果您发现它不那么吸引人,则可以制作一个宏来调用这两个宏:
#define printfFnc(...) { mexPrintf(__VA_ARGS__); mexEvalString("drawnow;");}

这使用了可变的宏__VA_ARGS__。它可能不是标准的一部分,但似乎在GCC和Visual C++中。只需像调用printfFnc(或printf)一样调用mexPrintf即可。

09-04 01:52