![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Гость_Игорь |
|
|||
|
Unregistered |
В чем может быть дело?
Мое приложение запускает два дочерних потока, первый сканирует участок памяти в ожидании того что второй поток запишет туда то что надо. Т.е. никаких особо ресурсо затратных действий эти потоки не производят. Но загрузка CPU - 100% Меня это настораживает , т.к. год назад я писал похожую программу (на той же версии Delphi) и потоков там было больше, но загрузка CPU при этом была маленькой. Установка разных приоритетов потоков ни к чему не привела. Где и что я делаю неправильно?? Заранее спасибо. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Да, Пока телапатов здесь нет... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Гость_Игорь |
|
||||
|
Unregistered |
Сорри.
Я просто подумал, что эта проблема имеет общеизвестные грабли типа "что-то забыл указать, дописать" Вот и не привел исходник. Вот он. Собственно ничего особенного.
Стартую его таким образом:
Второй поток не привожу, т.к. и без него загрузка 100% И вообще , я наверно от него откажусь - хватит одного. |
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
а он и должен занимать максимум ресурса процессорного времени - у него ж куча дел:
прочитать ^p, проверить, присвоить время, проверить время, прочитать ^p, проверить, присвоить время, проверить время, ... дело в том, что Windows не может знать, что значит этот код лично для этой программы, а вдруг там очень важная работа, которую нужно сделать как можно скорее? насколько я понял, суть потока состоит в том, чтобы ждать одного из двух событий вот это-то и надо сказать Windows, чтобы она(оно, он?) знала, что много процессорного времени тебе не нужно, и его можно использовать с пользой для других дел... для этого часто используются объекты синхронизации в данном случае можно было бы сделать, например, так: 1. создаем объект Event - аналог ^P, вместо того, чтобы туда что-то писать, нужно его просто активизировать (PulseEvent) 2. создаем второй объект Waitable Timer - аналог FinishTime а в дочернем потоке вместо цикла вызываем функцию WaitForMultipleObjects, которая остановится, когда один из объектов просигналит про все эти объекты синхронизации и функции работы с ними можно (и стоит) почитать в MSDN: http://msdn.microsoft.com P.S. кстати, можно таймер и не создавать, а вместо этого пользоваться функцией WaitForSingleObject с правильно указанным вторым параметром... -------------------- qqq |
|||
|
||||
| Гость_Игорь |
|
|||
|
Unregistered |
Спасибо за идею!
Малость не понятно, но уже знаю в каком направлении двигаться. Насчет моего потока - у него не было причин не загружать проц |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |