Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2011, 23:47   #11
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
> выдаёт абстрактную ошибку

У Борща коленка дрожала когда он на ней писал)
И он забыл (?) самую малость:

Код:
public
procedure Execute; override;
И правда) Однако запускалось)) Спасибо
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 14.02.2011, 23:49   #12
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
> почему когда я ставлю приоритет tpLower загрузка на цп идёт на 99%

приоритет не имеет отношения к загрузке. Если поток добровольно не отдаёт кванты времени системе (через Sleep(), WaitFor... и подобные вызовы), система считает, что этот поток занимает максимально отведенное ему время (при любом приоритете).
И как же я могу ограничить нагрузку, можно примерчик пожалуйста?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 15.02.2011, 01:35   #13
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

В общем случае это достаточно хитрый баланс между желаемым и возможным, но обычно делают просто:

1) если у вас бесконечно работы впереди (прога типа SETI), выставляете наименьший из возможных приоритетов и пусть система сама решает, когда переключаться на ваш поток. Поток будет жрать всё оставшееся от других потоков время (т.е. загрузка виртуального ядра будет 100%), но тормозов в работе системы это не вызовет, т.к. если ей нужен будет ЦПУ, она просто его вам не даст.

2) если работа потока связана с синхронным\асинхронным ожиданием данных, типа сокетов, com-портов и прочих файлов, или данных от других потоков, то вызвав очередную операцию ввода-вывода, или очередной WaitForSingleObject(), вы сами отдадите свое свободное время системе на указанный timeout (или навсегда, если таймаут указать забыли, а ввода-вывода никакого нет и не будет ))

3) если у вас поток ни то ни сё, просто вызывайте Sleep(1) почаще, и всё будет хорошо. Почаще это значит хотя бы 100 раз в секунду. Ну или если известно, что ваш поток должен 10 раз в секунду просыпаться и что-то там делать, то смело засыпайте на Sleep(100), делайте, что нужно, после чего опять Sleep(100).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 15.02.2011 в 01:40.
veniside вне форума Ответить с цитированием
Старый 15.02.2011, 01:55   #14
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://www.transl-gunsmoker.ru/2010/...111eleven.html

И ещё, возможно, в тему: http://www.transl-gunsmoker.ru/2010/...g-post_18.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 15.02.2011 в 01:59.
GunSmoker вне форума Ответить с цитированием
Старый 15.02.2011, 02:05   #15
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Да, статья зачётная, читал её в оригинале, но она подразумевает, что программист знает, что делает! А если программистЪ вместо использования WaitFor..() будет долбиться в цикле об булевский флаг, в ожидании данных, и на возражения юзеров от том, что жрать 100% ядра, пока данных нет, как-бы нехорошо, будет тыкать их этой ссылкой, говоря, что "он так видит", то к добру это не приведёт.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 15.02.2011, 12:34   #16
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
А если программистЪ вместо использования WaitFor..() будет долбиться в цикле об булевский флаг, в ожидании данных, и на возражения юзеров от том, что жрать 100% ядра, пока данных нет, как-бы нехорошо, будет тыкать их этой ссылкой, говоря, что "он так видит", то к добру это не приведёт.
Вот на этот случай я привёл вторую ссылку
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 15.02.2011, 22:56   #17
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Спасибо, прочитал, очень интересные статьи.
Увы Sleep(1) мне не помогает, ибо в моём потоке идёт поиск файлов и получается, что приходиться вызывать Sleep(1) каждый раз, когда найден файл, по-другому никак. Как можно ещё заменить Sleep или мб есть Sleep в пикосекундах?)
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 15.02.2011, 23:04   #18
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Sleep(0)
Хотя проблему бестолково организованного цикла это и не решит.
mss вне форума Ответить с цитированием
Старый 15.02.2011, 23:07   #19
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ты чем-то не тем занимаешься. Ищешь файлы - ну так ищи. Первая ссылка тебе очень в тему.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.02.2011, 18:08   #20
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Sleep(0)
Хотя проблему бестолково организованного цикла это и не решит.
Sleep(0) вообще ничего не даёт)
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с TThread pesi Общие вопросы Delphi 2 09.08.2010 14:12
TThread Vladislav_I Общие вопросы Delphi 0 30.04.2010 19:47
TThread в Дельфи ImmortalAlexSan Помощь студентам 2 23.04.2010 16:24
TThread и GUI Freezer Общие вопросы Delphi 8 05.08.2009 11:50
использование TThread amandra Общие вопросы Delphi 6 03.05.2008 03:13