Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Tthread и внутренний цикл


Страницы:   1 2 3

antonn ©   (2007-11-13 16:22:00) 

развейте мои сомнения:)
Создаю обычный Tthread, в Execute у него очень напряжный цикл while..do.
Процессор при расчете пытается загрузиться на полную катушку. Если я вставлю в тело цикла sleep(1) - приостановится поток tthread или главный поток программы?


Сергей М.   (2007-11-14 13:51:00) [1]


> как пул переполнится, пусть поток ожидает свободного местечка
> в нем


При этом семафор так и напрашивается)


Palladin   (2007-11-14 13:43:00) [2]

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


Сергей М.   (2007-11-14 13:36:00) [3]

Возьми да извести асинхроннокаким-либо удобным образом гуёвый поток о том, что такие-то результаты такой-то работы лежат там-то и готовы к употреблению, а сам после этого продолжай преспокойно заниматься по хозяйству.
Когда гуёвый поток будет свободен, он обнаружит извещение, возьмет эти соответствующие ему результаты и обработает их надлежащим образом.


antonn   (2007-11-14 13:30:00) [4]


> да и Synchronize тебе, скорей всего, тоже не нужен, бо он
> так же будет тормозить полезную работу нити.

и чтобы мне после этой "полезной работы" делать с резульаттами этой работы, которые нужно выгрузить в ГУИ?


Сергей М.   (2007-11-14 13:24:00) [5]

да и Synchronize тебе, скорей всего, тоже не нужен, бо он так же будет тормозить полезную работу нити.


antonn   (2007-11-14 13:21:00) [6]


> Для реализации выдержки заданного интервала времени нахрен
> не нужен никакой цикл - ни холостой ни женатый.

да, мне уже сообщили..


Сергей М.   (2007-11-14 13:20:00) [7]


> Мысли шире, таймер это не только TTimer


Да неужели ?!

То-то меня сомнения одолевали по этому поводу !


> пустой цикл - таймер


Для реализации выдержки заданного интервала времени нахрен не нужен никакой цикл - ни холостой ни женатый.


antonn   (2007-11-14 13:18:00) [8]

:)))) Мысли шире, таймер это не только TTimer :)
пустой цикл - таймер, в котором после истечения определенного временного ромежутка вызывается "синхронизе", который выгружает массивчик один в ГУИшные процедурки. Так же в потоке ведется несложная обработка некоторых вещей, для которых sleep(1) - ерунда


Slym   (2007-11-14 13:17:00) [9]

Сергей М. ©   (14.11.07 13:15) [38]
Ни чего ты не понимаешь в колбасных обрезках :)
это такой супер-пупер мультимедиа-атомный таймер...


Сергей М.   (2007-11-14 13:15:00) [10]


> часть таймера


Какого еще нафих таймера ?
Нет у тебя в нити никакого таймера - просто бесполезный цикл.


antonn   (2007-11-14 13:13:00) [11]


> А за каким лешим гонять холостой цикл ?

часть таймера, блин :)
только не спрашивай "зачем", там чуть выше говорилось :)


Сергей М.   (2007-11-14 13:12:00) [12]


> когда пустой цикл я его притормаживаю


А за каким лешим гонять холостой цикл ?


antonn   (2007-11-14 13:10:00) [13]


> Указав sleep(1) ты намеренно тормозишь свой поток.

именно, когда пустой цикл я его притормаживаю, иначе он прытко начинает следующий виток.


Сергей М.   (2007-11-14 13:04:00) [14]


> antonn ©   (14.11.07 12:59) [33]


Указав sleep(1) ты намеренно тормозишь свой поток.
Выбирай - или быстрей сделать работу или работать с постоянной оглядкой на "нагрузку проца".


antonn   (2007-11-14 12:59:00) [15]

я, наверное, сейчас глупую вещь скажу - сколько квантов времени входит за sleep(1)? явно больше, чем sleep(0)... при (0) проц чуть меньше, но отжирает ресурсы. А с (1) - все мягко, некаких чрезмерных cpuussage, потому что системе отдается больше времени.


Slym   (2007-11-14 04:25:00) [16]

antonn ©   (13.11.07 20:05) [31]
могу ли я слиип запихнуть

можно и с вантузом целоваться и ершик в зад засунуть, только зачем это тебе надо?
Sleep реально нужен только в исполнении Sleep(0) чтоб отдать системе неизрасходованый квант времени... Все остальное - Sleep(x) где х>0 костыли инвалиду


antonn   (2007-11-13 20:05:00) [17]

Leonid Troyanovsky ©   (13.11.07 19:40) [30]
я уже соеденил две штуки в одну :)
Был поток - в нем корячились картинки. Есть еще функция до подготовки и вывода картинок. И нужно интервалы вывода отделять друг от друга равными интервалами. Картинок разное кол-во за сеанс обработки и они выводятся разное время. Поэтому я пустил в том же потоке, где идет "синхронизе" бесконечный цикл, который выполняет роль таймера. Мне нужно то было узнать, могу ли я слиип запихнуть, чтоб цикл не жрал все время процессора, вот и все %)


Leonid Troyanovsky   (2007-11-13 19:40:00) [18]


> antonn ©   (13.11.07 19:23) [29]

> я скилет написал с минимумом функций, только чтоб показать,
>  где слип стоит :)

Возьми мультимедийный таймер, он работает в отдельном потоке,
с хорошим разрешением и точностью.
Через заданный интервал он пустит твою процедуру путем PostMessage.
Процедура же будет исполнена в VCL потоке, синхронизация ей не нужна.

See msdn timeSetEvent.

--
Regards, LVT.


antonn   (2007-11-13 19:23:00) [19]


> В коде этого либо нет, либо я тебя не понимаю, либо ты меня.

я скилет написал с минимумом функций, только чтоб показать, где слип стоит :)
кода больше. Synchronize(FOwner.DoTimer); - это часть расчетов по подготовки к выводу непосредственно в ГУИшные классы/массивы и тп.


> Anatoly Podgoretsky ©   (13.11.07 19:15) [28]
>
> Таймер то зачем, потокам таймер не нужен, особенно TTimer

я тоже так думаю, поэтому TTimer у меня в потоке отсутствует %)


Anatoly Podgoretsky   (2007-11-13 19:15:00) [20]

Таймер то зачем, потокам таймер не нужен, особенно TTimer


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо