|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.09.2011, 10:28 | #1 |
Форумчанин
Регистрация: 08.06.2011
Сообщений: 103
|
Не успеваю получить результат выполнения функции в процедуре
Приветствую Вас. С Delphi работаю совсем не давно и столкнулся с такими трудностями. А собственно, нужна помощь в таком вопросе.
По таймеру с интервалом 1 мс получаю список процессов, если нахожу новый - добавляю его в Memo, так же в процедуре OnTimer необходимо получить результат функции, которая по ProcessID возвращает полный путь. PHP код:
Список процессов получаю через PHP код:
PHP код:
если нужно могу добавить сюда код проекта или приложить исходник. Посоветуйте пожалуйста, как можно поступить в этой ситуации, заранее спасибо всем ответившим. Ув. модеры, прошу извинения если поместил не в тот топик, думал разместить в API, но сама суть вопроса, как я думаю, из общих знаний по Delphi.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Последний раз редактировалось Den7656; 12.09.2011 в 10:45. Причина: Дополнение вопроса |
12.09.2011, 10:39 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> функция не успевает возвратить результат
ерунда, причина в чём-то другом. Сам подход, когда в мемо пытаются занести некие значения 1000 раз в секунду в корне неверный. Кто мешает собирать данные в TStringList, а затем из него несколько (но не 1000!) раз в секунду переносить строки в мемо.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
12.09.2011, 10:39 | #3 | |
Форумчанин
Регистрация: 01.12.2009
Сообщений: 569
|
Эммм. Вот полезная статейка на вашу тематику - http://www.rsdn.ru/article/qna/baseserv/enumproc.xml. Если есть проблемы с синхронизацией, то есть ещё функции используемые вкупе с CreateToolHelp32SnapShot вот такие : Process32First и Process32Next, которые заполняют структуру PROCESSENTRY32 в которой есть такое вот поле - szExeFile, которое содежрит полный путь к ехе файлу.
Цитата:
Последний раз редактировалось notHaker; 12.09.2011 в 10:42. |
|
12.09.2011, 10:47 | #4 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Боюсь, все даже проще (хотя сказанное до меня верно, безусловно).. Можешь показать код процедуры на таймере?
Предпочитаю на "ты".
|
12.09.2011, 10:50 | #5 |
Форумчанин
Регистрация: 08.06.2011
Сообщений: 103
|
Да, но он (код) не пишет в Memo тысячу раз в секунду, он просто добавляет новый процесс в список, если он найден.
PHP код:
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Последний раз редактировалось Den7656; 12.09.2011 в 10:56. Причина: Дополнение вопроса |
12.09.2011, 10:57 | #6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Нда уж.. application.processmessages; вызывает новый вход в обработчик таймера (т.к. 1 мс уже давно прошла), где вы первым делом делаете NewPIDList.Clear();, и когда этот повторный обработчик выходит, управление возвращается в ваш цикл "for i := 0 to NewPIDList.Count - 1 do".. как это всё работает, одному БГ известно.
Проще всего не входить в обработчик таймера повторно, проверять флаг глобальный.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
12.09.2011, 11:03 | #7 | |
Форумчанин
Регистрация: 01.12.2009
Сообщений: 569
|
Цитата:
На вашем месте я бы так не издевался над программой и сделал бы хук на запуск процессов в системе и не надо никаких таймеров. Application.porcessmessages в таймере не нужен. |
|
12.09.2011, 11:04 | #8 |
Форумчанин
Регистрация: 08.06.2011
Сообщений: 103
|
Как проверить глобальный флаг не знаю. Попробовал убрать application.processmessages и получать полный путь с именем файла в самой процедуре OnTimer, все равно результат - пустая строка.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
|
12.09.2011, 11:07 | #9 |
Форумчанин
Регистрация: 08.06.2011
Сообщений: 103
|
Ладно, попробую поиздеваться еще над этим кодом, может че и получится
Если нет, буду разбираться с Hook'ами.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
|
12.09.2011, 11:09 | #10 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Проверять просто:
Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как проверить результат выполнения хранимой процедуры | kizl | БД в Delphi | 2 | 09.05.2011 19:33 |
Результат выполнения программы | g001501 | Общие вопросы C/C++ | 19 | 03.11.2010 21:16 |
Определить результат выполнения программы. | Joker<777> | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 23.04.2010 02:15 |
Математика. Получить параметр функции зная результат | Stilet | Общие вопросы по программированию, компьютерный форум | 2 | 06.03.2009 08:51 |
как отобразить в dbgrid результат выполнения commandText двух adodataset? | Гузель | БД в Delphi | 2 | 13.08.2008 16:17 |