![]() |
|
|
![]()
|
|
| OXOTHUK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Доброго времени суток.
Как можно замедлить выполнение функции? Мне надо чтобы выполнялась рекурсивная функция бесконечно(это несложно организовать), но чтоб при этом она не жрала вре ресурсы, чтобы ещё успевали выполняться обработка клавиш и 2 таймера без тормозов. Т.е. все работатет как всегда, только оставшиеся ресурсы идут в эту функцию. Была идёя: я где-то слышал, что есть функция которая делает задержку в милисекундах, но не тормозит систему, эти ресурсы уходят в работу других задач. Какая эта функция(если кто помнит) и может ли она помочь? |
|||
|
||||
| DukeCpp |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: нет Всего: 1 |
Sleep(unsigned long);
|
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: нет Всего: 18 |
OXOTHUK, делай в отдельном потоке.
CreateThread -------------------- Подпись больше не нужна |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
||||
|
||||
| OXOTHUK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Со слипом не получилось(как я идумал), он замедляет и выделяет ресурсы для других потоков, а не для функций и поэтому у меня вся прога стоит(она же один поток). Придётся делать через потоки.
С потоками особо не работал(создать удалить), поэтому проесните: 1) Если я создам поток и укажу функцию(ThreadFunc), эта функция будет вертеться или один раз выполнится? Если не будет: 2) Думал начать вызвать из ThreadFunc рекурсией ThreadFunc и между вызовами пусть будет Sleep, чтобы не высло, но подумал - и мне кажется что рано или поздно кончится стек? Как ещё можно организовать? |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
На самом-то днлн все оченб просто:
Application->ProcessMessage(); Просто вставь в свою рекурсивную функцию и все OK. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| OXOTHUK |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Так как выполняться моя рекурсивная функция должна паралельно моей проге я создал TThread. Там написал:
Т.е. как видно здесь у меня игра. Я хочу чтобы всё было как у людей, чтобы были fps и они были на свободные ресурсы системы. Так вот. Почему-то выполняется этот код всего несколько раз, а потом сам по себе перестаёт. Методом додагок, проб и ошибок(1 фатальная) я высянил что он прерывается каждый раз в абсолютно любое время(иногда номально выполняется пока кнопку не нажму, а иногда еле запуститься успеет.) Почему так может быть? Возможно я сделал какие-то ошибки свойственные новичкам в потоках? Хотя я вроде всё сделал как в той книге(которую Romikgy мне показал): создал процесс и вызвал резюм(хотя процесс я создал динамически), а в деструкторе формы прописал Terminate для потока. Это сообщение отредактировал(а) OXOTHUK - 17.8.2006, 19:47 |
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Возможно, но это нигде не написано ( может ошибаюсь ). ОХОТНИК, есть подозрение, что engine->DrawScene() - обращается к объектам vcl, если это так, то и для этого метода используй Synchronize И обязательно посмотри сюда http://www.forum.vingrad.ru/index.php?showtopic=108118 Это сообщение отредактировал(а) Artemon - 17.8.2006, 21:30 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| OXOTHUK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Всё вроде работает, только тормозит. Я поставил для нового потока минимальную приоритетность, но всё равно для таймеров на форме не хватает и они чуть-чуть тормозят. Нельзя ли как-то повысить приоритет для главного потока?
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
я одного не понял .... у тя тормозило , ты вынес все в отдельный поток и обратно вызываешь его в синхронизации? так чего ты удивляешься торможению????
имхо синхронизация как раз и работает в основном потоке! в отдельные потоки надо выносить ф_ции где нет обращений VCL ! и сами синхронизации должны быть очень редкими (относительно) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| OXOTHUK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Не, у меня не тормозило, у меня вообще висело.
Да я понял, что во всем виновата синхронизация, но что тут сделаешь, у меня вообще нет функции без VCL. А мне надо во втором потоке отрисовывать Canvas->Draw, а в таймерах формы изменять координаты, загружать картинки, и др. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
это идентично , ты лучше определись что у тя забирает процессорное время, в твоей ф_ции? и вот этот кусок кидай в отдельный поток -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Если делать все по уму, то никаких тормозов не будет.
-------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |