Вопрос: Нагрузка на проц в циклах | Добавлено: 09.04.10 10:08 |
Автор вопроса: ![]() |
Ответы | Всего ответов: 26 |
Номер ответа: 16 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 44 |
Профиль | Цитата | #16 | Добавлено: 14.04.10 09:11 |
Еще такой вопрос, вобщемто по теме, т.к. снова натыкаюсь на такой цикл. Что вы используете, если желаете паузу? Есть такая команда api sleep, она не катит, т.к. при её выполнении не работает Timer. Придумал такой вариант:
Создаю переменную boolean, отвечающую за активацию паузы и проворачиваю её в модуле Timer при проверки тек даты: dtim - тек дата dtplus - дата с прибавкой времени задержки timact - true при активации таймера timok - true - время пришло
И теперь такаяже проблема нагрузки цпу при вечном цыкле в местах Do loop, вернее не вечном, но грузит полюбому. |
Номер ответа: 17 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #17 | Добавлено: 14.04.10 09:39 |
Вечные циклы - это быдло-стайл,тоже самое касается задержки через таймер.. Sleep корректно юзать только в отдельных потоках, равно как и задачи, которые требуют ожидания, правильно выносить в отдельные треды. Нужна задержка в основном потоке - воспользуйся толковым советов из ответа №12 и не надо тут изобретать велосипед!
А вообще, по большому счету, все твои проблемы выдуманные и они чаще всего возникают из за неверной архитектуры приложения. |
Номер ответа: 18 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 44 |
Профиль | Цитата | #18 | Добавлено: 14.04.10 13:33 |
Угу, дельный совет. Просьба есть. Можеж из какой-нибудь своей программы выдрать кусок в качестве демки по организации потока? А то в инете вечно натыкаюсь на устаревшую инфу. А хелпа не даёт полной картины.
V1RTUOZ, у тебя пример для vba 6.0. При открытии в 9.0 (2008) идёт конвертация и всёравно не работает. Есть свежий пример для новой версии? |
Номер ответа: 19 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 44 |
Профиль | Цитата | #19 | Добавлено: 14.04.10 15:42 |
Ладно, кажись нашёл, всем кого еще заинтересует этот вопрос вот ссылки:
http://msdn.microsoft.com/ru-ru/library/ywkkz4s1.aspx http://msdn.microsoft.com/ru-ru/library/ck8bc5c6(v=VS.90).aspx |
Номер ответа: 20 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 44 |
Профиль | Цитата | #20 | Добавлено: 14.04.10 17:17 |
Бьюсь об стену. Поток - это тоже линейная штука и имеет окончание. После окончания сделал цикл на новый запуск потока и такаяже фигня с нагрузкой на цпу. А на счёт задержки, мне главное, чтобы во время задержки работали клавишы отмены запуска и выхода из программы. Eros, вижу ты круто разбираежся, тут у меня явно не такая постройка проги, что там на счёт ManualResetEvent и AutoResetEvent? Как на примере они мне могут помоч? |
Номер ответа: 21 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 44 |
Профиль | Цитата | #21 | Добавлено: 14.04.10 17:31 |
Или может кто скажет, вот например, резидентные программы, которые в памяти всё время висят и выполняют свою работу - ониж в вечном цыкле. Они как построены? |
Номер ответа: 22 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #22 | Добавлено: 14.04.10 18:41 |
Ладно, кажись нашёл, всем кого еще заинтересует этот вопрос вот ссылки:
BackgroundWorker - Это туфта.. only students// настоящие джедаи его не юзают... Это всего лишь оболочка над Thread что там на счёт ManualResetEvent и AutoResetEvent? Как на примере они мне могут помоч?
Чтобы понять как они тебе помогут, ты должен понимать и четко осозновать что такое поток, как он работает и взаимодействует с соновным потом, что такое синхронизация потоков и т.д.. Когда ты это поймешь, ты упрешься в то, что какой то поток должен ожидать какого либо события или действия от другого потока.. и вот тут тебе понядобятся эти вещи: http://msdn.microsoft.com/ru-ru/library/ksb7zs2x.aspx Надеюсь, ты понимаешь, что я не смогу тебе рассказать на пальцах всю эту тему... тебе придется самому все это изучать.. Thread, Delegate и все, что с ними связано... Или может кто скажет, вот например, резидентные программы, которые в памяти всё время висят и выполняют свою работу - ониж в вечном цыкле. Они как построены?
Они построены по тому же самому принципу... Они тупо висят в памяти и ждут какого либо события для начала своей работы. К примеру: В COM-порт пришли данные.. поток проснулся, считал их оттуда, обработал.. и снова уснул или перешел в режим ожидания.. Никаких вечных циклов тут нет.. |
Номер ответа: 23 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #23 | Добавлено: 14.04.10 19:06 |
Плюс почитай азы...
http://msdn.microsoft.com/ru-ru/library/9xyf641a.aspx http://msdn.microsoft.com/ru-ru/library/3e8s7xdd.aspx |
Номер ответа: 24 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 44 |
Профиль | Цитата | #24 | Добавлено: 14.04.10 20:25 |
благодарю, посмотрю что можно сделать |
Номер ответа: 25 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #25 | Добавлено: 14.04.10 21:10 |
Ты лучше на пальцах объясни что ты пытаешься сделать, что тебе такие извращения понадобились.. Может там все гораздо проще решается.. |
Номер ответа: 26 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #26 | Добавлено: 17.04.10 05:06 |
Почему циклы так грузят проц и как этого избежать? У меня 2 ядра и 1-ый под 100%.
Такого не должно быть. Планировщик должен равномерно загрузить оба ядра на 50%. Если ты, конечно, не устанавливал affinity mask, но я не думаю что ты это делал. |
|