2016-03-18 2 views
-1

Я пишу программу оконных форм (C++/CLI), которая несколько раз вызывает исполняемую программу в большом цикле for. Я хочу выполнять вызовы с исполняемым файлом параллельно, так как для запуска требуется одна минута.Параллельное выполнение программы в C++/CLI

Ключ часть кода окна форм является большим для цикла (на самом деле 2 петель):

for (int a=0; a<1000; a++){ 
    for (int b=0; b<100; b++){ 
     int run = a*100 + b; 
     char startstr[50], configstr[50]; strcpy(startstr, "solver.exe"); 
     sprintf(configstr, " %d %d %d", run, a, b); 
     strcat(startstr, configstr); 
     CreateProcessA(NULL, startstr,......) ; 
    } 
} 

целых чисел «запустить», «а» и «б» используются solver.exe программа. «Выполнить» используется для записи уникального выходного текстового файла из каждого запуска программы. «a» и «b» - это числа, используемые для чтения определенных текстовых файлов ввода. Они не уникальны для каждого прогона.

Я не ожидания после каждого вызова «CreateProcess», поскольку я хочу, чтобы они выполнялись параллельно.

В настоящее время мой код работает и работает корректно. Однако он запускает огромное количество экземпляров программы solver.exe, заставляя мой компьютер становиться очень медленным, пока все не закончится.

Вопрос в том, как создать очередь, ограничивающую количество параллельных процессов (например, количество физических ядер на машине), чтобы они не все пытались работать одновременно? Память также может быть проблемой, если петли for установлены больше.

Вопрос вторичный, может ли потенциальный параллельный файл считывать разные экземпляры solver.exe, создавая проблему? (Я могу это исправить, но не хочу, если мне это не нужно.)

Я знаком с openmp и C, но это моя первая попытка запустить параллельные процессы в программе windows forms.

Благодаря

+0

Это должно быть отдельный .exe? Если вы будете управлять кодом решателя, это упростит работу, если это DLL. – Stu

+0

"может ли потенциальный одновременный просмотр файлов разными экземплярами solver.exe создать проблему?" Это зависит - если это просто чтение, тогда это должно быть хорошо, если вы не заблокируете файл каким-либо образом. – Stu

+0

Независимо, это потенциальный дубликат. Посмотрите на это и посмотрите, подходит ли оно вашим потребностям: http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable – Stu

ответ

0

мне удалось сделать то, что я хочу с помощью функции OpenMP «параллельно для» запустить внешний контур параллельно и функции omp_set_num_threads(), чтобы установить количество параллельных процессов. Как было предложено, одновременные чтения файлов не вызвали никаких проблем в моей системе.