Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пользуйся функцией вставки контента из Кармана. Это удобно!
Candid
1630
Candid 2013.12.14 20:29 
Запускаю извлечение файла из архива, например через WinExec. И прежде чем дальше с этим файлом работать, хотелось бы быть уверенным, что процесс закончился. Самая простая идея - попытаться через возвращаемый WinExec дескриптор что-нибудь у этого процесса спросить. Например вызвать что-то типа GetProcessId. Хотелось бы конечно как-то сократить время на эксперименты, может кто-нибудь поделится опытом решения подобной задачи?
220Volt
1175
220Volt 2013.12.14 20:53  

Если не путаю, то вы можете после создание процесса, например через CreateProcess(), передать описатель в WaitForSingleObject() и ждать завершения.

Candid
1630
Candid 2013.12.14 20:59  
220Volt:

Если не путаю, то вы можете после создание процесса, например через CreateProcess(), передать описатель в WaitForSingleObject() и ждать завершения.


Спасибо, я и такую возможность имел в виду проверить. Вопрос конечно будет ли индикатор ожидать завершения? Ответ правда тоже понятен - нужно проверять :).
Alexey Subbotin
4999
Alexey Subbotin 2013.12.14 21:23  
Хм, интересно, а вариант воспользоваться каким-нибудь zipfldr.dll прямо из индикатора не пройдет?
Candid
1630
Candid 2013.12.14 21:33  
alsu:
Хм, интересно, а вариант воспользоваться каким-нибудь zipfldr.dll прямо из индикатора не пройдет?

Вообще первая мысль у меня была что должен быть WinAPI для работы с зипом, раз это встроено в неё. Но как-то долго ничего не находилось и мысль пошла другим путём :).
Alexey Subbotin
4999
Alexey Subbotin 2013.12.14 21:40  
Наверное, не пойдет, там какой-то COM-сервер внутри, хрен разберешь))
Candid
1630
Candid 2013.12.15 09:22  

Собственно мне шашечки или ехать? Надо быть проще :). Делаем командный файл, в конце ставим переменную окружения и пишем её в файл флагов. Пред запуском файл флагов чистим, после запуска проверяем "пока не всплывёт".

Против лома нет приёма :)

220Volt
1175
220Volt 2014.01.22 05:46  

Я сегодня подобными фокусами занимался, вспомнил про эту тему. Вот что получилось:

#import "msvcrt40.dll"  // msvcrt20.dll  msvcrt.dll
    int system (const uchar&[]);
#import 

void start()
{
   uchar cmd_line[100];
   StringToCharArray("notepad.exe", cmd_line);
   // StringToCharArray("start /B notepad", cmd_line);    // А так без ожидания
   system(cmd_line);
   Alert("return");
}

Прикрутил system() из C Run time библиотеки, наверное везде есть. Заставить ждать завершения процесса командную строку:

C:\>start /WAIT notepad
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий