Странная проблема с бесконечным циклом while в EXE - PullRequest
0 голосов
/ 14 ноября 2008

У меня странная проблема с Windows CE:

Запуск 3 EXE

1) Сначала exe выполняет некоторую работу каждые 8 ​​минут, если не указано событие выхода. 2) Второй exe выполняет какую-то работу каждые 5 минут, если не указано событие выхода. 3) Третий exe, в то время как цикл работает, и в то время как цикл выполняет некоторую работу в случайное время Этот цикл while продолжается до тех пор, пока не будет выдано событие выхода.

Теперь это событие выхода является глобальным событием и может быть передано любым процессом.

Проблема в Когда я запускаю First EXE, он работает нормально, Запустите второй exe, он работает нормально, запустить третий exe работает нормально

Когда я запускаю все exe, тогда запускаются только третьи exe и никакие инструкции не выполняются в первую и вторую.

Как только третий exe завершается первым, а второй начинает обрабатываться. Может ли быть так, что цикл while в третьем exe принимает все циклы процессора? Я не пытался поставить Sleep, но я думаю, что это может помочь. Но ОС должна давать CPU всем процессам ... Есть мысли ???

Ответы [ 4 ]

2 голосов
/ 14 ноября 2008

Поместите цикл while в третий EXE, чтобы каждый раз проходить через цикл и смотреть, что происходит. Даже если это не исправит этот конкретный зонд, не всегда полезно опрашивать цикл while, и даже использование Sleep внутри цикла - плохая замена правильного таймера.

1 голос
/ 14 ноября 2008

(из памяти) Процессы в Windows CE выполняются до завершения, если не запущены процессы с более высоким приоритетом, или они работают в течение своего отрезка времени (100 мс), если выполняются другие процессы с равным приоритетом. Я не уверен, что Windows CE дает процессу с активным / передним окном небольшое повышение приоритета (так же, как на рабочем столе Windows) или нет.

В вашей ситуации первым двум процессам не хватает процессорного времени, поэтому они никогда не запускаются, пока не завершится третий процесс. Вот несколько способов решить эту проблему:

  • Заставить третий процесс ждать / блокировать некоторые многопроцессорные примитивы (мьютекс, семафор и т. Д.) И короткий тайм-аут. Использование WaitForMultipleObjects / WaitForSingleObject и т. Д.
  • Заставьте третий процесс ждать, используя вызов Sleep каждый раз вокруг цикла обработки.
  • Повысьте приоритет других процессов, чтобы при необходимости запустить их, прервав третий процесс и фактически запустив его. Я бы, вероятно, сделал наименее часто вызываемый процесс наивысшим приоритетом из трех процессов.

Еще одна вещь, которую нужно проверить, - это то, что третий процесс фактически выполняет свои задачи вовремя и не привязывает процессор, пытаясь выполнить свою работу нормально.

1 голос
/ 14 ноября 2008

На MSDN я также прочитал, что CE допускает (менее) 32 процессов одновременно. (Однако переключение контекста происходит молниеносно ...). Некоторые из них уже заняты системными службами.

0 голосов
/ 14 ноября 2008

Да, я думаю, что это не очень хорошее решение. Я могу попробовать использовать таймер и посмотреть результаты ..

...