завис ? не завис ? ...

Тема в разделе "Delphi - Система", создана пользователем Spoiler, 16 авг 2005.

Статус темы:
Закрыта.
  1. Spoiler

    Spoiler Гость

    Репутация:
    0
    Всем привет.

    Народ скажите как можно из дельфи зная имя процесса определить завис он или нет.

    Люди памагите проблема тормозит всю работу ...
     
  2. Barmutik

    Barmutik Гость

    Репутация:
    0
    Для начала расшифруйте Ваше понимания термина завис?
     
  3. Spoiler

    Spoiler Гость

    Репутация:
    0
    завис, насколько я понимаю это когда процесс не отвечает на системные запросы.

    как определить завис процесс или нет скажите кто нибудь
     
  4. Barmutik

    Barmutik Гость

    Репутация:
    0
    Не отвечает на системные запросы это не значит что он заивс полностью.. вполне возможно что сейчас процесс вполняет критичные действия и не обрабатывает очередь сообщений.

    Для определния можно использовать SendMessageTimeout и например послатьWM_NULL или например если процесс работает то GetExitCodeProcess возвращает STILL_ACTIVE

    Или сипользовать WaitForInputIdle..

    Менеджер задач как бытует мнение (не 100% верное) использует SendMessageTimeOut c 3-5 секундным интервалом...
     
  5. Spoiler

    Spoiler Гость

    Репутация:
    0
    если неслложно кинь примерчик для opera.exe ( просто не пойму как использовать эти функции )
    очнь надо ...

    ЗЫ можно для SendMessageTimeout или GetExitCodeProcess
     
  6. Barmutik

    Barmutik Гость

    Репутация:
    0
    Посмотрите описание функции .. у Вас есть хэндл процесса и он передаётся во все эти функции...

    Что конкретно вызывает проблемы?
     
  7. Spoiler

    Spoiler Гость

    Репутация:
    0
    хэндла нет

    есть имя процесса, и большое желание провреить висит он или нет ...

    трудности именно по использованию функции, в смы
     
  8. Barmutik

    Barmutik Гость

    Репутация:
    0
    Хммм.. Если у Вас есть имя процесса... то переберите все процессы по слепку через функцию CreateToolhelp32Snapshot.

    Найдите по имени Ваш процесс.. вот Вам и хэндл.. а далее посмотреть ХЕЛП по использованию функций и вызвать их с нужными параметрами...
     
  9. Spoiler

    Spoiler Гость

    Репутация:
    0
    Люди. Я не пойму так сложно кинуть примерчик по данной функции что ли ...
     
  10. Barmutik

    Barmutik Гость

    Репутация:
    0
    По какой конкретно?

    Или за Вас надо всё полностью написать.. <_<
     
  11. Spoiler

    Spoiler Гость

    Репутация:
    0
    <_<

    Barmutik
    SendMessageTimeOut

    Вобщем нарыл функцию которая проверяет помер процесс или нет

    Есть функция по перебору всех процессов - читаю в память ( фкнкция определения состояния процесса будет вызываться достаточно часто так что работаю с памятью )

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

    Киньте примерчик, очень надо :lol:
     
  12. Barmutik

    Barmutik Гость

    Репутация:
    0
    Вообще-то в Вашем примере Вы используете структуру TProcessEntry32 у этой структуру есть поле th32ProcessID, в котором и находится тот идентификатор процесса что Вам и требуется.

    Вот даже в MSDN есть фраза насчёт SendMessageTimeout:

    В общем случае у процеса может не быть окна и вы его не найдёте с помощью FindWindow. Но если оно есть то пример приведённый Вами выше вполне справится с задачей которую Вы хотите решить...
     
  13. Spoiler

    Spoiler Гость

    Репутация:
    0
    В общем это, ногами просьба не бить ...

    Исходя из всего вышесказанного предположил следующее, ( эот только предположение ... )

    Люди подскажите, как можно вытянуть идентификатор процесса ...
     
  14. Barmutik

    Barmutik Гость

    Репутация:
    0
    Ну по идее должно работать ...

    А чем Вам не понравился мой способ доставания идентификатора процесса из Вашей структуры? <_< :lol: Прочтите мой предыдущий пост...
     
  15. Spoiler

    Spoiler Гость

    Репутация:
    0
    Вобщем вроде что то написал, у меня вопрос вот какой

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

    Почему ?

    И еще - функция SendMessageTimeOut возвращает 0 если приложение обрабатывает посылаемое сообщение или нет ?



     
  16. Barmutik

    Barmutik Гость

    Репутация:
    0
    Ну потому что Ваш процесс выедает всё процессорное время. Вот никому больше оно и не достаётся.

    Иммет смысл вставить
    Код (Text):
     Sleep(1);
    Application.Processmessages;
    для того что бы отдавать часть времени другим.

    Вот что говорит MSDN насчёт кода возврата:

     
  17. Spoiler

    Spoiler Гость

    Репутация:
    0
    Вставил процессмессэдже то же самое програ не видит этот процесс

    По второму возник вопрос
    Если функция успешна то возврат не ноль это как

    Функция выполнилась успешно - процее к которому обращаются висит или нет ?
     
  18. Spoiler

    Spoiler Гость

    Репутация:
    0
    Извиняюсь за последний пост ( глюка там = нижний регистр текущий процесс сравниваю с S1 )

    переделал, но какая то ерунда там, висит не висит мое S1.exe алгоритм все равно возвращает ноль, что все так не так


    ЛЮДИ ПАМАГИТЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕ !!!!!!!!!!!!!
     
  19. Spoiler

    Spoiler Гость

    Репутация:
    0
    Разьясните, что я так сделал.
    Использовал FProcessEntry32.th32ProcessID - вытянул идентификатор процесса и передал на вход функции Zavison_YN (ClassName: cardinal): longint;

    У меня всетаки вопрос еще по параметрам функции, в функции используются правильные параметры или нет ...

     
  20. Spoiler

    Spoiler Гость

    Репутация:
    0
    Народ, кто что посоветует по проблеме ...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей