【发布时间】:2019-08-01 10:25:00
【问题描述】:
我想在我的 c++ 程序中运行一个 matlab 代码并等待 Matlab 的结果,然后继续我的 c++ 代码。问题是程序不等待 matlab 并继续运行。 我应该在我的代码中添加任何内容吗?
实际上我尝试创建进程并使用了 WaitForSingleObject。
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
system("matlab.exe -nosplash -nodesktop -nodisplay -r run('Main')");
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
.
.
.
}
【问题讨论】:
-
您正在混合运行外部程序的两种不同且不兼容的方式。
std::system函数是一个标准的 C++ 函数,它会阻塞直到你执行的程序完成。STARTUPINFO和PROCESS_INFORMATION结构,句柄和WaitForSingleObject和CloseHandle用于Windows API 功能CreateProcess,这是一个完全不同的运行程序系统。 -
那么,我该怎么办?我也只使用了 system("matlab.exe -nosplash -nodesktop -nodisplay -r run('Main')");但它不会等待它
-
如果你运行的程序启动了自己的进程并让它们在主进程退出时在后台运行,那么你如何运行程序并不重要。如果有办法告诉程序不要提前退出,你需要使用它。否则你需要想出另一种方法来做你想做的事。
标签: c++ createprocess waitforsingleobject