FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

как в бесконечных циклах избавиться от сильной загрузки машины

+5
Eric-S
diamass
Andrew
tux
electrik
Участников: 9

Страница 1 из 2 1, 2  Следующий

Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  electrik Сб Окт 04, 2008 5:50 pm

все мы когда либо делали программы в которых присудствуют безконечные циклы. во времена дос, об этом не задумывались, но а windows, многозадачная и вот тут, особенно в консольных приложениях бывают пробллемы. программа с бесконечным циклом почти весит машину, покрайней мере до 1 гигагерца. в простых приложениях, достаточно поставить в начале или в конце цикла Sleep, проблема исчезнет. но не всегда со sleep можно далеко уехать, так как он не позволяет прерывать программу на тысячные доли секунды, и если со sleep писать какую-нибудь программу обработки звука, или архиватор, эта программа будет работать сутками. конечно все можно расчитать, запускать слееп после некоторых событий, но это лишний код, да и зачем извращаться, если операционная система сама может распределить приоритеты.вот и возникает вопрос, операционке надо посылать какое-нибудь сообщение, чтоб она контролировала приложение. приведу пример:

код
dim key as integer
do
key=getkey
if hibyte(key)= 59 then 'если нажимаем скан код клавиши f1
print "key f1 scancode = ",hibyte(key) 'высвечиваем сканкод
end if

loop until lobyte(key)=27 'крутим бесконечную петлю, пока ненажмем escape, только уже по асции коду

вот как сделать такую петлю, чтоб она совсеми дружила и не грузила комп. у меня машина пень 3 гигагерца, ни чего не подвисает, а на работе k6 450 мегагерц, там это страшно запустить, прога забирает почти все. на 900 мегагерцах, тоже углючивает.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  tux Сб Окт 04, 2008 6:48 pm

в XP есть какието апиши (пардон непомню какие, тк сам не интересовался), которыми можно выставлять приоритет, соответсвенно если поставить меньший, то будет менше грузить
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  electrik Вс Окт 05, 2008 3:15 pm

я думаю, что к конкретной операционке не стоит привязыватся. пробовал запускать бесконечный цикл, в диспетчере задачь приоритет нормальный и все-равно грузит. даже если на visual basic запустить бесконечный цикл, он тоже начинает глючить.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  tux Пн Окт 06, 2008 7:13 am

хз, но допустим если глянуть работу с сокетами в винде, то там используется стандартный цикл обработки сообщений, а вот допустим в Линухе все делается только через обычные циклы. Притом и в других источнках обработка реализуется аналогично, вследствии в винде скорее всего мона реализовать чета подобное, используя какие либо разрешающие вызовы, а вот в линухе нинаю
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Andrew Чт Окт 16, 2008 9:58 pm

так по-моему поставить sleep 10 в цикле, и грузить машину не будет.

visual basic запустить бесконечный цикл, он тоже начинает глючить

Оно не глючит. Просто это связано с тем, что программа пытается выполнится как можно быстрее, доходит до максимума (ну к примеру 1000 циклов в секунду) и забирает все процессорное время. А если ее ограничить (сделать задержку) то уже будет не 1000 циклов в сек. а к примеру 500. И процессор будет тратить на него только половину времени.

P.S. В других языках (в которых я писал) это был Delay (10). Помогало когда писал программы типа чата, поскольку тоже была такая же проблема.

Andrew

Сообщения : 45
Дата регистрации : 2008-09-23
Возраст : 35
Откуда : Киев

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  electrik Сб Окт 18, 2008 8:59 am

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

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  diamass Пт Май 29, 2009 10:48 pm

visual basic запустить бесконечный цикл, он тоже начинает глючить
В VB можно вставить DoEvents и цикл будет срабатывать через раз, чтобы дать приложениям тоже время.

Sub Proba()
Dim a As Long
For a = 0 To 1000000000
DoEvents
' Чего-нибудь творим.
Next a
End Sub

Может и в FB есть что-то подобное.
Дело в том, что Slib Не высвобождает тики процессора, а просто притормаживает программу, но приэтом продолжает слидить за таймером.
Slip(10)
По меньшей мере по миллисекундам следить будет, что на дохлых машинах не даст ожидаемого ускорения.
DoEvents же останавливает приложение на один тик и если нет активности приложений, то возобнавляет работу до следующего прохода.
Если же есть активность других приложений, то программа может пропустить горазда больше одного тика.
Проверено и отслежено по таймеру.

diamass

Сообщения : 4
Дата регистрации : 2009-05-29
Возраст : 55
Откуда : Невинномысск

http://sitedia.narod.ru/

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Сб Май 30, 2009 2:14 am

Да. Сейчас глянул в мануал и не нашел DoEvents.
Толи поиск глючит, толи надо вкрутить.

нтересно, а как это на ассемблере может выглядить. Там же ведь тоже есть ожидание тика.

Кстати, а тик, это сколько?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  tux Сб Май 30, 2009 9:16 pm

обычно элементарная комманда на асме выполняется в среднем за 3-4 тика, nop помоему за один, задержки в асме помоему и делаются использованием nop-а в циклах, или по прерываниям от таймера... но об етом лучше наверно расскажет электрик Smile
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Сб Май 30, 2009 10:03 pm

Неа. Это такт. Как раз ассемблерная команда и выполняется за 1 или более тактов.
А вот "тик" это скорее из области многозадачности. Но я не уверен.
Например в php можно зарегистрировать функцию, которая будет вызываться каждый тик.
Если бы тик был бы слишком маленький, то всё бы тут же подвисало.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Незадача

Сообщение  ShenZN Вс Май 31, 2009 7:29 pm

По моему тик это пол секунды, потому что тик-так это уже целая секунда! Very Happy

Если серьезно, Smile , то впервые слышу о таком понятии в программировании как "тик".
Может кто то объяснит о чем идет речь Sad

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  electrik Вс Май 31, 2009 8:40 pm

привет.
или по прерываниям от таймера... но об етом лучше наверно расскажет электрик

нет, не расскажет, поскольку ассемблер я знаю, но не до такой степени, чтоб знать за сколько тактов выполняется та или иная команда. это надо лесть в справочники. поповоду команды ноп, пробовал ставить 8 штук, неа, не помогает. за doEvent, спасибо, будем разбираться. похоже, надо делать отслеживание событий.
у меня сейчас идет глобальный проект, пока говорить не буду, но лишь скажу, что это для нашего форума и под FreeBasic и бесплатно. такого под FreeBasic еще не делали. я думаю, что может месяца через три выпущу.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Пн Июн 01, 2009 1:53 am

О! Здесь уже собрался цвет нашего форума. Даже я вышел из запоя... А "тик" так и не знаем. Ну что же, придёться мне значит гуглить.


Ну и!.. Выяснилось две вещи. Во-первых тик в php, это что-то другое. А вот в линухе:

"Тики" -- это отрезки времени, используемые ядром Linux. Это понятие базируется на константе HZ, определение которой вы найдете в /usr/include/asm/param.h.
Величина этой константы различна для разных аппаратных платформ. Так например, для архитектуры i386 один "тик" равен 1/100 секунды, а для платформа Alpha
-- 1/1024 секунды.

В php:

A tick is an event that occurs for every N low-level tickable statements executed by the parser within the declare block. The value for N is specified using
ticks=N within the declare blocks's directive section.

Not all statements are tickable. Typically, condition expressions and argument expressions are not tickable.

The event(s) that occur on each tick are specified using the register_tick_function(). See the example below for more details. Note that more than one event can occur or each tick.

ха-ээ-эм. Даже и не знаю как такое перевести. Тик это событие которое происходит после выполнения большинства инструкций. На это событие можно подвесить callback функцию. Или не так...


Последний раз редактировалось: Eric-S (Чт Июн 04, 2009 7:35 am), всего редактировалось 1 раз(а)

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Замабувараев Вт Июн 02, 2009 6:27 am

В Visual Basic'е есть элемент управления Timer. Он вызывает событие Tick через определённый Interval времени (в миллисекундах).
Замабувараев
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 40
Откуда : Красноярск

http://www.freebasic.su

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Я люблю VB до слез...

Сообщение  vbman Сб Июн 06, 2009 2:09 pm

diamass пишет:
visual basic запустить бесконечный цикл, он тоже начинает глючить
В VB можно вставить DoEvents и цикл будет срабатывать через раз, чтобы дать приложениям тоже время.

Sub Proba()
Dim a As Long
For a = 0 To 1000000000
DoEvents
' Чего-нибудь творим.
Next a
End Sub

И сколько лет эта программа будет крутить цикл? DoEvents - штука очень тормозная! affraid Я с этим столкнулся, когда на VBA (! pale ) писал программку для попиксельной обработки любого изображения (соседу в институте задали сделать в Ворде программу, запускаемую из макроса, чтобы можно было перебрать попиксельно рисунок и чего-нибудь с этими пикселями понавычеслять tongue - типа фильтра графического выходит, хотя получались довольно интересные эффекты Very Happy ) Так вот, в цикле (не For, а с переходом на метки после проверки переменных) с DoEvents я не смог дождаться конца обработки картинки (800х600) Sad , а с Слип(1) у меня вышло в районе 3-5 сек. Very Happy (пиксели перебирал из памяти, возвращаемой Диб-секцией). Так что DoEvents - кака на больших циклах... pig Вот от такого и мифы о невозможной тормознутости VB confused
vbman
vbman

Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 42
Откуда : Украина, Кировоград

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Пн Июн 08, 2009 7:51 am

Так надо же с умом вставлять!
Если что-то считаеться и нужна скорость, то это один вопрос. Грамотнее будет выделить в отдельный процесс и выставить соответствующий приоритет.
А вот если с интерфейсом работать, с доступом к файлам, базам данных, сайтам, то doevents вполне даже в тему.
Хотя опять же, смотря какие файлы и какие базы.

doevents не притормаживает скорость, а останавливает процес воообще! И если например сидеть и дёргать мышой над окном проги, то расчёты будут завершены гораздо быстрее.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  electrik Вт Июн 09, 2009 8:38 pm

привет. есть решение, хотя и не самое быстрое, видимо, наверное, как в vb. покрайней мере sleep 1, намного медленнее, но на больших циклах, этот вариант расчитывает тоже долго.

код:
#include "windows.bi"

declare sub ProcessMessages()

sub ProcessMessages()
dim wMsg as MSG ' структура сообщений

while TRUE
if not PeekMessage(@wMsg, 0, 0, 0, PM_REMOVE) then exit while
if wMsg.Message <> WM_QUIT then
TranslateMessage(@wMsg)
DispatchMessage(@wMsg)
end if
wend

end sub

for i as integer = -20000000 to 20000000
processmessages
next
beep

а теперь попробуйте следующий код:

for i as integer = -20000000 to 20000000
sleep 1
next

ой как долго придеться ждать, пока закончиться цикл.

у ProcessMessages, есть подводные камни, конечно это не относится к зрячим программистам. в программе экранного доступа jaws, ProcessMessages будет ожидать, пока не начнешь дергать мышой. или не ткнеш клаву. причины. клавиатурный перехватчик, который повидимому, сжирает сообщения. видео перехватчик, но там не понятно. пока не проверил в графическом режиме. в консоли у jaws, в некоторых случаях бывают лаги. например, запрограммированые нажатие одновременно несколько клавиш.
вполне возможно, что в gui приложении, с jaws глюков не будет. ведь как-то пользуемся мы программами sound forge и т.д. возможно там реализован другой способ, но так или иначе, все-равно на сообщениях.
как это можно еще оптимизировать. создать глобальную переменную типа:
dim shared wMsg as MSG ' структура сообщений
и передавать ее процедуре. почему так. дело в том, что при каждом запуске процедуры, создается вот эта структура сообщений, и на это уходит не много, но все же это время.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Пн Сен 07, 2009 3:21 am

Ща я вам парочку вещей расскажу.
Электрик тут говорил, что привязываться к системе не нужно, но всё же!

Проблема-то возникла из-за чего? Опрос клавиатуры и мыши... Ну и ещё всякое...

Значит для dos проблема не актуальна, т.к. прога кушает 100% времени процессора.

С linux'ом не знаю, наверное там есть своё.

Так что я только про windows.

И так DoEvent. Как я понимаю его прямой аналог, это функция WinAPI Sleep().

Как до неё достучаться из фрибэйсика не знаю, даже не пробовал. Если кто знает, пущай подскажет.

Sleep( msecond as integer )

Суть этой функции, ждать указанное число милисекунд.
Если указать 0, то не будет ждать.

Но фишка её в том, что она работает именно с самим процессом
Sleep(0) , то же самое, что DoEvent

Тут надо немного рассказать о многозадачности.
Процессор разделяет своё время на так называемые кванты.
И винда, каждой проге по очереди даёт квант времени.
Если процесс запрашивает больше, приоритет выше, то квантов даёться больше, а если приоритет низкий, то квантов меньше.

Так вот функция Sleep(0) говорит, что процессу больше не нужен отданный программе квант времени. Винда сразу переключаеться на следующую прогу.

Если же задано время, то, когда винда возвращаеться к нашему процессу, Sleep смотрет прошло время или нет. Если время прошло, то прога продолжает выполняться дальше, иначе, квант считаеться законченным.

Соответственно, говорить тут о точности паузы в милисекундах нельзя. Время может совпасть, а может быть и дольше. В зависимости от приоритета процесса и загруженности системы. Ну и конечно же тактовой частоте процессора.

Вот так вот.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Пн Сен 07, 2009 3:34 am

Теперь вторая вещь. Опять же вспомним, зачем нам это надо?

Обработка сообщений от клавиатуры и мыши...
Не знаю как, плакать или смеяться.

Но то что было хорошо для доса, совсем не подходит для винды.
Я говорю именно о консольных функциях.

Как вы помните, дос однозадачная система, а винда многозадачная.
И это накладывает свой отпечаток на архитектуру программы.

По этому я пришол к выводу, что правильнее для опроса клавиатуры и мыши, да и вообще для работы с консолью использовать соответствующие системные функции.

Проблемы с загрузкой процессора тут же пропадают.

Само же приложение выглядит теперь так:
Код:


#include "windows.bi"


' если произошла ошибка
sub MyErrorExit( msg as string )
MessageBox( 0, strptr(msg), 0, MB_ICONERROR )
end 1
end sub


' событие мыши
sub MouseEventProc( byVal e as MOUSE_EVENT_RECORD )
end sub


' изменение размера
sub ResizeEventProc( byVal e as WINDOW_BUFFER_SIZE_RECORD )
end sub


' событие клавиатуры
sub KeyEventProc( byVal e as KEY_EVENT_RECORD)
end sub




' хэндл буфера ввода
dim as HANDLE hStdin

' буфер чтения событий ввода
dim as INPUT_RECORD irInBuf(1 to 128)

dim as DWORD cNumRead, fdwMode, fdwSaveOldMode, i

' Получим стандартный дескриптор ввода. 
hStdin = GetStdHandle(STD_INPUT_HANDLE)
if hStdin = INVALID_HANDLE_VALUE then
MyErrorExit("GetStdHandle")
end if

' Сохраним текущий режим ввода для будущего восстановления
' при выходе из программы. 
if not GetConsoleMode(hStdin, @fdwSaveOldMode ) then
MyErrorExit("GetConsoleMode")
end if


'  Включим события ввода от мыши и окна. 
fdwMode = ENABLE_WINDOW_INPUT or ENABLE_MOUSE_INPUT
if not SetConsoleMode(hStdin, fdwMode ) then
MyErrorExit("SetConsoleMode")
end if

' петля чтения и обработки событий ввода. 
do
' Ожидание событий. 
if not ReadConsoleInput( _
hStdin, _ ' дескриптор буфера ввода 
@irInBuf(1), _ ' буфер, в котором читаем 
128, _ ' размер буфера чтения 
@cNumRead _ ' число прочитанных записей 
) then
MyErrorExit("ReadConsoleInput")
end if


' Направляем события соответствующим обработчикам. 
for i = 1 to  cNumRead
select case irInBuf(i).EventType

' ввод с клавиатуры 
case KEY_EVENT
KeyEventProc( irInBuf(i).Event.KeyEvent )
' ввод от мыши 
case    MOUSE_EVENT
MouseEventProc( irInBuf(i).Event.MouseEvent )
 
' изменение размера экранного буфера 
case WINDOW_BUFFER_SIZE_EVENT
ResizeEventProc( irInBuf(i).Event.WindowBufferSizeEvent )

' игнорирование событий фокуса 
case FOCUS_EVENT
 
 игнорирование событий меню 
case MENU_EVENT'

' неучтённое событие
case else
MyErrorExit("unknown event type")

end select
loop

Это только схема... Если сделаю работающий демо код, на freebasic, то кину. А эта бяка у меня пока не желает компилиться.
Если кто знает почему, то подскажите.
Ну а я пошол спать!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  vbman Пн Сен 07, 2009 9:12 am

Sleep - она из kernel32, вызыываать ее можно подключив windows.bi.

Sleep замораживает поток откуда она вызвана (попробуйте в отдельном потоке ее вызвать), а DoEvents - просто дает обработаться очереди сообщений приложения. Это разные вещи... Suspect
vbman
vbman

Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 42
Откуда : Украина, Кировоград

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Пн Сен 07, 2009 11:29 am

Что касаеться Sleep, писал точно.
А вот DoEvent не знаю, не работал с ним и не читал про него.

Он вроде бы кроме задержки ещё и ожидает события от окна?
Ну дык Sлееп этого не делает.

Замараживает... Можно и так сказать. Только это слово не объясняет сути.
Sleep именно прерывает квант времени отданный процессу.
т.е. Не расходует процессорного времени, делясь им с другими процессами, которым оно нужнее.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Error Пн Сен 07, 2009 7:05 pm

я так понемаю что слееп эта не та вещ нагружающия процесор, тогда всем проблема в петлях *)

Error

Сообщения : 18
Дата регистрации : 2009-05-24

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Пн Сен 07, 2009 7:15 pm

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

А причём здесь вообще sleep. Мы сейчас говорим о Sleep()!

Петли же сами по себе нагружать процессор не могут.

Вся заморочка именно в операционной системе, приоритете процесса и времени процессора.

Задача-то даже не в разгрузке петель, а в том, как это сделать.

В прочем, Электрик в первом посту спрашивал для операций типа перекодирования, сжатия и прочих грузных штук.
Тут нужно всё же отделять второй процесс. А в первом повесить отслеживание событий и управление вторым процессом.
Это классическое решение такой задачи.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Error Пн Сен 07, 2009 7:41 pm

Eric-S пишет:
Error пишет:я так понемаю что слееп эта не та вещ нагружающия процесор, тогда всем проблема в петлях *)

А причём здесь вообще sleep. Мы сейчас говорим о Sleep()!
как называется пост, какой вообще слееп, если он негрузить что еще есть. ?*(

Re: как в бесконечных циклах избавиться от сильной загрузки машины

Eric-S Сегодня в 5:15 pm

Error

Сообщения : 18
Дата регистрации : 2009-05-24

Вернуться к началу Перейти вниз

как в бесконечных циклах избавиться от сильной загрузки машины Empty Re: как в бесконечных циклах избавиться от сильной загрузки машины

Сообщение  Eric-S Пн Сен 07, 2009 7:53 pm

поясняю ещё раз

функция sleep
приостанавливает процесс и ожидает заданное число секунд или нажатия любой клавиши.
Это функция являеться стандартной для языка basic.

Функция Sleep
прерывает квант времени для выполняемого процесса и ожиданет заданное число милисикунд.


Петля это всего лиш конструкция, повторяющая набор инструкций.

Ни что из этого не грузит процессор.

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

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

Может быть ещё и с этим похимичить?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Страница 1 из 2 1, 2  Следующий

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения