На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Запустить стороннее приложение с атрибутами?
    Спасибо всем, высказавшим свое мнение.
    Поясню, почему я всем этим озадачился:

    1. На разработчиков MyHeavyTask.exe повлиять нельзя. На разработчиков интерпретатора железки тоже повлиять нельзя. Людей там мало, научные задачи стоят перед ними сложные. Работаю по-старинке.
    А так минимум, чего бы хотелось, - при консольном запуске программы не заюзывать графику.

    2. Почему важно идеально отслеживать работу программы?
    Просто мы собираем статистику (одна из наших задач) и часто оставляем расчеты, скажем, на ночь.
    Вот и хочется избежать ситуации, когда вечером запустил на счет, например, 200 циклов программы (поочередно, с разными начальными данными), а утром вместо посчитанных 200 программ с разными начальными данными обнаруживаешь зависон на, например, 10-м шаге цикла запуска MyHeavyTask.exe

    P.S. По результатам своих изысканий отпишусь позже. Идея с FindWindow кажется перспективной!
    Сообщение отредактировано: mkudritsky -
      Цитата mkudritsky @
      2. Почему важно идеально отслеживать работу программы?
      Просто мы собираем статистику (одна из наших задач) и часто оставляем расчеты, скажем, на ночь.

      Поэтому, крайне перспективно убедить других разработчиков внести некоторые изменения
      в дочерние приложения. Например, регулярную посылку сообщений твоему (управляющему)
      приложению.
      В этом случае можно было бы делать однозначный вывод о зависании приложений.
      После этого:
      1. Управляющее приложение снимает дочерние процессы.
      2. Выясняет объём выполненной работы.
      3. Запускает дочерние приложения на продолжение выполнения.

      Тогда ночь не будет потрачена напрасно. :)
        Как и обещал, излагаю прием, при помощи которого я сейчас закрываю интерпретатор.
        Напомню - интерпретатор запускается тяжелой задачей MyHeavyTask.exe Но после ее завершения остается открытым.

        Закрывается интерпретатор кодом в одну (!) строчку:
        ExpandedWrap disabled
          SendMessage(FindWindow("TInt","Имя окна интерпретатора"), WM_DESTROY,0,0);


        Для работы этого фрагмента кода надо знать:
        1. Наименование окна интерпретатора. Это узнать очень просто - достаточно посмотреть на самую верхнюю строчку этого окна. :)

        2. Класс, к которому принадлежит интерпретатор.
        Этот параметр узнать сложнее. Делается такое при помощи утилиты, входящей в комплект Билдера:
        Program Files\Borland\CBuilder6\Bin\ws32.exe

        3. Наконец, закрывать окно при массовых расчетах надо при помощи именно WM_DESTROY - тогда оно закрывается без лишних разговоров и бесед с пользователем. Если закрывать окно при помощи WM_CLOSE, то в нашем случае интерпретатор норовит побеседовать с пользователем (типа "Вы уверены, что хотите меня закрыть?!"). И ответить на эти вопросы интерпретатора не представляется возможным, если расчеты оставлены на ночь.

        P.S. Ну и последнее - обо всем этом, как оказалось, написано в той же самой книге Архангельского по Билдеру (часть 1).
        Сообщение отредактировано: mkudritsky -
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0212 ]   [ 17 queries used ]   [ Generated: 16.04.24, 09:43 GMT ]