|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.07.2013, 16:05 | #1 |
Форумчанин
Регистрация: 04.06.2010
Сообщений: 212
|
Паритет потока от таймера
Здравствуйте
Я обычно использую в качестве потоков обработчики таймеров, и мне нужно осуществить в таком потоке вечный цикл по отношению существования программы. Вот его код на vb.net: While Not ((Now.Day = NextMasurement.Day) And (Now.Month = NextMasurement.Month) _ And (Now.Year = NextMasurement.Year) And (Now.Hour = NextMasurement.Hour) _ And (Now.Minute = NextMasurement.Minute) And (Now.Second = NextMasurement.Second)) If TimeRunThread = -1 Then Exit Sub End While Таймер вызывает только один раз этот callback, но при его работе почему то процессор загружается на 50% не пойму причин для этого. Now - структура с системным временем NextMasurement - структура Он мне нужен только для проверки условия NextMasurement =Now
мой сайт http://wanes101.16mb.com/myblog
|
10.07.2013, 19:51 | #2 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Любой вечный цикл будет целиком грузить то ядро, на котором выполняется. Это нормально, ведь там непрерывно выполняются инструкции (даже если в теле цикла ничего не делается). Если у вас двухъядерный процессор (а так видимо и есть), то будет загружено 50% - одно ядро.
Проблему можно решить, поставив например Thread.Sleep(1) после каждой итерации - это разгрузит поток. Ну или другое время укажите, в миллисекундах.
Изобретатель велосипедов
|
10.07.2013, 20:23 | #3 |
Форумчанин
Регистрация: 04.06.2010
Сообщений: 212
|
Как минимум каждая windows программа должна иметь один вечный цикл, к примеру допустим
while GetMessage(Msg,0,0,0) TranslateMessage(Msg) DispatchMessage(Msg) end while Это пример WinMAin процедуры любого WindowsForm приложения, и значит там тоже используется Sleep? За решение проблемы спасибо
мой сайт http://wanes101.16mb.com/myblog
|
10.07.2013, 20:27 | #4 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Так как GetMessage блокирует выполнение вашего кода до следующего windows сообщения, то логично предположить, что внутри оно делает почти то же самое)
Изобретатель велосипедов
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как получить доступ к методу потока(TThread) из основного потока? | Pcrepair | Общие вопросы Delphi | 3 | 30.03.2013 14:52 |
запуск потока из таймера, как? | buket | Общие вопросы Delphi | 6 | 16.12.2011 11:36 |
Должно быть 3 потока. А диспетчер задач показывает, что потока создано 2 | BEL9ILLI | Общие вопросы Delphi | 3 | 06.12.2011 20:26 |
Как узнать номер потока из самого потока? | GaMeSTeR | Помощь студентам | 0 | 03.12.2010 09:50 |
Запуск таймера из потока (delphi 2010) | Terikon | Общие вопросы Delphi | 10 | 07.08.2010 18:09 |