while(WaitForSingleObject(hStopEvent, 1000) != WAIT_OBJECT_0)
{
/***************************************************************/
// Главный цикл службы.
/***************************************************************/
}
Запуск сторонней программы в цикле
Здравствуйте. Столкнулся с такой задачей. Кратко: моя программа формирует текстовый файл исходных данных. Сторонняя программа читает этот файл, выполняет вычисления и формирует свой текстовый файл результатов расчета. После этого моя программа читает файл результатов расчета и при необходимости опять формирует файл исходных данных.... и так повторяется до достижения определенного условия в цикле. В режиме отладки все проходит гладко - выполняется нескольно итераций цикла. При запуске на выполнение происходит лишь одна итерация... может скорость выполнения на столько велика, что файлы не успевают читаться/записываться? Как с этим бороться? Спасибо.
Ответ нашел. Просто надо притормозить прогу свою. Апишная функция Sleep(...) в скобках задержка в миллисекундах....
WaitForSingleObject в руки.
Функции MsgWaitForMultipleObjectsEx, SignalObjectAndWait, WaitForMultipleObjectsEx и WaitForSingleObjectEx отличаются от остальных функций ожидания, тем, что они могут произвольно выполнить предупреждающую операцию "занято-ждать" (alertable wait operation). В предупреждающей операции "занято-ждать", функция может возвратить значение, когда выполнены заданные условия, но она может также возвратить значение и тогда, если система поставила в очередь процедуру завершения ввода-вывода или APC для исполнения ждущим потоком.
Цитата:
WaitForSingleObject
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
Возвращаемое значение
Если функция успешно завершает свою работу, то возвращаемое значение указывает на причину завершения работы функции. Оно может принимать одно из следующих значений:
WAIT_ABANDONED - указанный объект является мютексом, который не был освобожден потоком, которому он принадлежит, перед завершением данного потока. Принадлежность мютекса вызывающему потоку гарантируется. Поэтому этот объект остался неотмеченным;
WAIT_OBJECT_0 -указанный объект находится в отмеченном состоянии;
WAIT_TIMEOUT - истек период ожидания, а объект остался неотмеченным.
Если функция аварийно завершает свою работу, она возвращает значение WAIT_FAILED. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
hHandle - дескриптор объекта. Список типов объектов, дескрипторы которых могут использоваться в качестве данного аргумента, содержится в примечании. В Windows NT дескриптор должен иметь уровень доступа SYNCHRONIZE.
dwMilliseconds - определяет интервал времени, измеряемый в миллисекундах. По истечении этого интервала времени, если указанный объект остается неотмеченным, функция завершает свою работу. Если данный аргумент имеет нулевое значение, функция проверяет состояние объекта и немедленно прекращает свою работу. Если аргумент dwMilliseconds имеет значение INFINITE, то функция ждет отметки объекта неограниченное время
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
Возвращаемое значение
Если функция успешно завершает свою работу, то возвращаемое значение указывает на причину завершения работы функции. Оно может принимать одно из следующих значений:
WAIT_ABANDONED - указанный объект является мютексом, который не был освобожден потоком, которому он принадлежит, перед завершением данного потока. Принадлежность мютекса вызывающему потоку гарантируется. Поэтому этот объект остался неотмеченным;
WAIT_OBJECT_0 -указанный объект находится в отмеченном состоянии;
WAIT_TIMEOUT - истек период ожидания, а объект остался неотмеченным.
Если функция аварийно завершает свою работу, она возвращает значение WAIT_FAILED. Более подробную информацию об ошибке можно получить, вызвав функцию GetLastError.
Аргументы
hHandle - дескриптор объекта. Список типов объектов, дескрипторы которых могут использоваться в качестве данного аргумента, содержится в примечании. В Windows NT дескриптор должен иметь уровень доступа SYNCHRONIZE.
dwMilliseconds - определяет интервал времени, измеряемый в миллисекундах. По истечении этого интервала времени, если указанный объект остается неотмеченным, функция завершает свою работу. Если данный аргумент имеет нулевое значение, функция проверяет состояние объекта и немедленно прекращает свою работу. Если аргумент dwMilliseconds имеет значение INFINITE, то функция ждет отметки объекта неограниченное время
Код:
Цитата: Jeyson
Ответ нашел. Просто надо притормозить прогу свою. Апишная функция Sleep(...) в скобках задержка в миллисекундах....
А дождаться завершения дочернего процесса что не позволяет?