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

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

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

    Spoiler Гость

    Всем привет.

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

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

    Barmutik Гость

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

    Spoiler Гость

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

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

    Barmutik Гость

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

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

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

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

    Spoiler Гость

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

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

    Barmutik Гость

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

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

    Spoiler Гость

    хэндла нет

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

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

    Barmutik Гость

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

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

    Spoiler Гость

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

    Barmutik Гость

    По какой конкретно?

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

    Spoiler Гость

    <_<

    Barmutik
    SendMessageTimeOut

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

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

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

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

    Barmutik Гость

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

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

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

    Spoiler Гость

    В общем это, ногами просьба не бить ...

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

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

    Barmutik Гость

    Ну по идее должно работать ...

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

    Spoiler Гость

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

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

    Почему ?

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



     
  16. Barmutik

    Barmutik Гость

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

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

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

     
  17. Spoiler

    Spoiler Гость

    Вставил процессмессэдже то же самое програ не видит этот процесс

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

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

    Spoiler Гость

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

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


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

    Spoiler Гость

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

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

     
  20. Spoiler

    Spoiler Гость

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

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