我的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
即可。