MATLAB форк (MS Windows) процесс - PullRequest
1 голос
/ 23 января 2012

Я пытаюсь развить процесс (MS Windows) из matlab

myCaller = ['theExe.exe' ' its arguments' ' &'];
system(myCaller);

Однако я не могу добиться вилки.

В конце концов я пытаюсь запустить процесс (MS Windows) и закрыть вызывающую подпрограмму MATLAB.

Любые предложения о том, как достичь вышеупомянутого?

1 Ответ

0 голосов
/ 23 января 2012

Это сложно; Я сейчас работаю над тем же в 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 существуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...