Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Нагрузка на проц в циклах Добавлено: 09.04.10 10:08  

Автор вопроса:  Spiritsun

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 16
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #16 Добавлено: 14.04.10 09:11
Еще такой вопрос, вобщемто по теме, т.к. снова натыкаюсь на такой цикл. Что вы используете, если желаете паузу? Есть такая команда api sleep, она не катит, т.к. при её выполнении не работает Timer. Придумал такой вариант:
Создаю переменную boolean, отвечающую за активацию паузы и проворачиваю её в модуле Timer при проверки тек даты:
dtim - тек дата
dtplus - дата с прибавкой времени задержки
timact - true при активации таймера
timok - true - время пришло

  1. If timact Then
  2.             If timok = False Then
  3.                 Dim dtim As DateTime = DateTime.Now
  4.                 If dtplus <= dtim Then
  5.                     timok = True
  6.                     timact = False
  7.                 End If
  8.             End If
  9.         End If
  10.  
  11. 'А там где мне нужна пауза вставляю такую шмотку:
  12. dtplus = DateTime.Now
  13. dtplus = dtplus.AddSeconds(2) 'задержка
  14. timact = True
  15.             Do
  16.                 System.Windows.Forms.Application.DoEvents() ' нужно вставлять чтобы Timer не завис
  17.             Loop Until timok
  18.             timok = False


И теперь такаяже проблема нагрузки цпу при вечном цыкле в местах Do loop, вернее не вечном, но грузит полюбому.

Ответить

Номер ответа: 17
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 14.04.10 09:39
Вечные циклы - это быдло-стайл,тоже самое касается задержки через таймер.. Sleep корректно юзать только в отдельных потоках, равно как и задачи, которые требуют ожидания, правильно выносить в отдельные треды. Нужна задержка в основном потоке - воспользуйся толковым советов из ответа №12 и не надо тут изобретать велосипед!
А вообще, по большому счету, все твои проблемы выдуманные и они чаще всего возникают из за неверной архитектуры приложения.

Ответить

Номер ответа: 18
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #18 Добавлено: 14.04.10 13:33
Угу, дельный совет. Просьба есть. Можеж из какой-нибудь своей программы выдрать кусок в качестве демки по организации потока? А то в инете вечно натыкаюсь на устаревшую инфу. А хелпа не даёт полной картины.

V1RTUOZ, у тебя пример для vba 6.0. При открытии в 9.0 (2008) идёт конвертация и всёравно не работает. Есть свежий пример для новой версии?

Ответить

Номер ответа: 19
Автор ответа:
 Spiritsun



Вопросов: 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
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #20 Добавлено: 14.04.10 17:17
Бьюсь об стену. Поток - это тоже линейная штука и имеет окончание. После окончания сделал цикл на новый запуск потока и такаяже фигня с нагрузкой на цпу. А на счёт задержки, мне главное, чтобы во время задержки работали клавишы отмены запуска и выхода из программы. Eros, вижу ты круто разбираежся, тут у меня явно не такая постройка проги, что там на счёт ManualResetEvent и AutoResetEvent? Как на примере они мне могут помоч?

Ответить

Номер ответа: 21
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #21 Добавлено: 14.04.10 17:31
Или может кто скажет, вот например, резидентные программы, которые в памяти всё время висят и выполняют свою работу - ониж в вечном цыкле. Они как построены?

Ответить

Номер ответа: 22
Автор ответа:
 EROS



Вопросов: 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
Автор ответа:
 EROS



Вопросов: 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
Автор ответа:
 Spiritsun



Вопросов: 15
Ответов: 44
 Профиль | | #24 Добавлено: 14.04.10 20:25
благодарю, посмотрю что можно сделать

Ответить

Номер ответа: 25
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #25 Добавлено: 14.04.10 21:10
Ты лучше на пальцах объясни что ты пытаешься сделать, что тебе такие извращения понадобились.. Может там все гораздо проще решается..

Ответить

Номер ответа: 26
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #26 Добавлено: 17.04.10 05:06
Почему циклы так грузят проц и как этого избежать? У меня 2 ядра и 1-ый под 100%.

Такого не должно быть.
Планировщик должен равномерно загрузить оба ядра на 50%. Если ты, конечно, не устанавливал affinity mask, но я не думаю что ты это делал.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам