Board.KolibriOS.org http://board.kolibrios.org/ |
|
Предлагаю добавить 2 функции http://board.kolibrios.org/viewtopic.php?f=1&t=3746 |
Page 1 of 2 |
Author: | paulcodeman [ Tue Aug 28, 2018 11:09 am ] |
Post subject: | Предлагаю добавить 2 функции |
Мы знаем, что есть функция 5, которая приостанавливает выполнение программы, но главный минус, что программа не выполняется в это время. Я предлагаю реализовать 2 функции, которые будут работать как в JavaScript: setTimeOut, SetInterval. Смысл такой setTimeOut, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции. Смысл такой setInterval, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции и все это выполняется в цикле. ClearInterval - убивает процесс Я это все смог реализовать на языке Си в программе для колибри, это возможно реализовать как системную функцию? |
Author: | tsdima [ Tue Aug 28, 2018 12:09 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
Для начала, объясни, чем не устраивают имеющиеся фукции 5 и 23. |
Author: | paulcodeman [ Tue Aug 28, 2018 12:20 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
tsdima wrote: Для начала, объясни, чем не устраивают имеющиеся фукции 5 и 23. 5 - тормозит приложение 23 - таймаут распределяется не равномерно. Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность. |
Author: | tsdima [ Tue Aug 28, 2018 1:23 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
pavelyakov wrote: 23 - таймаут распределяется не равномерно. Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность. Для того, чтобы определить, сколько нужно ждать, есть функции текущего времени 26.9 и 26.10. Нужно вычесть текущее время из времени нужного момента. Если таких таймаутов несколько, найти минимум. Конечно, функция 23 ждёт с точностью 1/100 секунды, но на практике такой точности вполне хватает. |
Author: | Pathoswithin [ Tue Aug 28, 2018 1:26 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
pavelyakov Такие функции будут превращать однопоточную программу в многопоточную и программист должен это учитывать. Потому только через функцию 51. |
Author: | tsdima [ Tue Aug 28, 2018 1:28 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
Многопоточность - не всегда лучший выход. |
Author: | theonlymirage [ Tue Aug 28, 2018 2:50 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования. По сути тебе нужно создать многопоточное приложение, где функционал отделён от обработки событий (от оболочки GUI и ввода пользователя). Такое может потребоваться при разработке того же будильника или таймера. Можно сделать и заготовку/шаблон для таких приложений (имею ввиду на разных языках: C--, FASM, Oberon и т.д.). Но не обязательно это должен быть отдельный системный вызов. Это нужно хорошо взвесить, обсудить и переварить. ![]() Несколько вопросов: - можно ли реализовать это сейчас, используя имеющиеся системные функции? в целом да. - обработка в ядре предполагает, что нам нужно это выполнять быстрее и с большей точностью, чем имеющиеся решения, точно ли это нужно? - для каких задач нужна такая быстрота и точность? может ли оказаться такой функционал полезным для систем реального времени? и планирует ли Колибри ОС развиваться в сторону решения этих задач? - нужен ли этот функционал разработчикам приложений? думаю, что да. - нужен ли этот функционал в ядре ос в виде системных вызовов? лично я сомневаюсь. - нужно ли делать это отдельным системным вызовом или прикрепить как подфункцию к уже существующему системному вызову? по возможности нужно прикрепить, только к какому вызову: 51? - нужно ли расширять ядро, тем что уже возможно реализовать на основе имеющегося в угоду удобства решения определённого круга задач? у меня нет ответа. |
Author: | tsdima [ Tue Aug 28, 2018 3:12 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
theonlymirage wrote: Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования. Много шума из ничего. Если всё-таки использовать многозадачность, то кто мешает начинать новый поток с вызова функции 5 и зацикливать его в случае типа setInterval? |
Author: | paulcodeman [ Tue Aug 28, 2018 3:25 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
tsdima wrote: theonlymirage wrote: Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования. Много шума из ничего. Если всё-таки использовать многозадачность, то кто мешает начинать новый поток с вызова функции 5 и зацикливать его в случае типа setInterval? мешает разрастание программы |
Author: | paulcodeman [ Tue Aug 28, 2018 3:28 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
Вообще можно отследить какие часто функции используются во многих программ, это например строковые ф-ции strcpy, strcmp, memcpy, и тд я видел есть даже реализации в самом ядре, почему их не выносят в прерывание? Ведь это уменьшило код почти всех программ? |
Author: | tsdima [ Tue Aug 28, 2018 4:03 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
pavelyakov wrote: почему их не выносят в прерывание? Ты хоть примерно представляешь, что делает процессор при выполнении инструкции int 0x40? |
Author: | paulcodeman [ Tue Aug 28, 2018 4:31 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
tsdima wrote: pavelyakov wrote: почему их не выносят в прерывание? Ты хоть примерно представляешь, что делает процессор при выполнении инструкции int 0x40? Я понял, тут сглупил, но все де надо что-то придумать на подобии PE dll |
Author: | tsdima [ Tue Aug 28, 2018 7:43 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
pavelyakov wrote: надо что-то придумать на подобии PE dll Есть библиотеки .obj в формате MS COFF. |
Author: | Serge [ Tue Aug 28, 2018 9:28 pm ] |
Post subject: | Re: Предлагаю добавить 2 функции |
Quote: Я это все смог реализовать на языке Си в программе для колибри, это возможно реализовать как системную функцию? А зачем системная функция, если уже реализуется существующими функциями API? Если использовать фьютекс, можно сделать ожидание с прерыванием. |
Author: | 0CodErr [ Wed Aug 29, 2018 8:52 am ] |
Post subject: | Re: Предлагаю добавить 2 функции |
pavelyakov wrote: Я это все смог реализовать на языке Си в программе для колибри Ну так ты ведь и так уже реализовал. Выноси в библиотеку тогда и используй.pavelyakov wrote: Вообще можно отследить какие часто функции используются во многих программ, это например строковые ф-ции strcpy, strcmp, memcpy, и тд я видел есть даже реализации в самом ядре, почему их не выносят в прерывание? facepalm В идеале всё, что может быть вынесено из ядра — лучше оттуда вынести. И не так давно были планы по выносу GUI из ядра, а у тебя всё наоборот — предлагаешь запихнуть в ядро неядерные функции.pavelyakov wrote: Ведь это уменьшило код почти всех программ? Ага, а ещё быстродействие. Ты, наверное, хочешь, чтобы как в MenuetOSCode: 151 - Mathlib pavelyakov wrote: Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность. И снова facepalm. Для этого НЕ нужно многопоточность. Вот к чему приводит нежелание думать.Очередной велосипед. pavelyakov wrote: реализовать 2 функции, которые будут работать как в JavaScript: setTimeOut, SetInterval. Смысл такой setTimeOut, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции. У тебя всё это есть уже!!! Тебе не нужно что-то ещё добавлять в ядро для этого — неужели это не доходит? Что за идиотское желание пихать всякую херь в ядро???
Смысл такой setInterval, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции и все это выполняется в цикле. ClearInterval - убивает процесс |
Page 1 of 2 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |