Это сложно; Я сейчас работаю над тем же в Ubuntu.
По сути, MATLAB будет сидеть и ждать завершения вызываемой программы, прежде чем продолжить собственный процесс, несмотря на &
в конце.
Обходное решение, которое я использовал, заключалось в том, чтобы использовать mex-файл, который создает отдельный поток (используя pthread
). Этот отдельный поток запускается theExe.exe
, в то время как основной поток mex выходит.
Некоторые непроверенные биты моего кода, иллюстрирующие процесс:
#include "mex.h"
#include <iostream>
#include "pthread.h" /* for threading */
// thread function which calls system call, and waits for it to finish
void *do_thread(void *pid)
{
mexPrintf("In thread\n");
// replace this with your system call - don't know if std::system works on windows?
std::system("your_system_call");
pthread_exit(NULL);
}
// main mex function
void mexFunction (int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
{
pthread_t thread;
mexPrintf("In main: creating thread\n");
rc = pthread_create(&thread, NULL, do_thread, (void *)v);
return;
}
В Ubuntu это можно скомпилировать примерно так:
mex mex_filename.cpp -I/usr/include/ -lpthread -lrt
Признаюсь, я не знаю, как скомпилировать это в Windows, но версии pthreads для Windows существуют.