Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср дек 19, 2018 2:59 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 15 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 11:09 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 252
Мы знаем, что есть функция 5, которая приостанавливает выполнение программы, но главный минус, что программа не выполняется в это время. Я предлагаю реализовать 2 функции, которые будут работать как в JavaScript: setTimeOut, SetInterval. Смысл такой setTimeOut, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции.
Смысл такой setInterval, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции и все это выполняется в цикле.
ClearInterval - убивает процесс
Я это все смог реализовать на языке Си в программе для колибри, это возможно реализовать как системную функцию?


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 12:09 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
Для начала, объясни, чем не устраивают имеющиеся фукции 5 и 23.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 12:20 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 252
tsdima писал(а):
Для начала, объясни, чем не устраивают имеющиеся фукции 5 и 23.

5 - тормозит приложение
23 - таймаут распределяется не равномерно. Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 1:23 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
pavelyakov писал(а):
23 - таймаут распределяется не равномерно. Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность.

Для того, чтобы определить, сколько нужно ждать, есть функции текущего времени 26.9 и 26.10. Нужно вычесть текущее время из времени нужного момента. Если таких таймаутов несколько, найти минимум. Конечно, функция 23 ждёт с точностью 1/100 секунды, но на практике такой точности вполне хватает.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 1:26 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1257
pavelyakov
Такие функции будут превращать однопоточную программу в многопоточную и программист должен это учитывать. Потому только через функцию 51.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 1:28 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
Многопоточность - не всегда лучший выход.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 2:50 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 219
Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования. По сути тебе нужно создать многопоточное приложение, где функционал отделён от обработки событий (от оболочки GUI и ввода пользователя). Такое может потребоваться при разработке того же будильника или таймера. Можно сделать и заготовку/шаблон для таких приложений (имею ввиду на разных языках: C--, FASM, Oberon и т.д.).
Но не обязательно это должен быть отдельный системный вызов. Это нужно хорошо взвесить, обсудить и переварить. ;)

Несколько вопросов:
- можно ли реализовать это сейчас, используя имеющиеся системные функции? в целом да.
- обработка в ядре предполагает, что нам нужно это выполнять быстрее и с большей точностью, чем имеющиеся решения, точно ли это нужно?
- для каких задач нужна такая быстрота и точность? может ли оказаться такой функционал полезным для систем реального времени? и планирует ли Колибри ОС развиваться в сторону решения этих задач?
- нужен ли этот функционал разработчикам приложений? думаю, что да.
- нужен ли этот функционал в ядре ос в виде системных вызовов? лично я сомневаюсь.
- нужно ли делать это отдельным системным вызовом или прикрепить как подфункцию к уже существующему системному вызову? по возможности нужно прикрепить, только к какому вызову: 51?
- нужно ли расширять ядро, тем что уже возможно реализовать на основе имеющегося в угоду удобства решения определённого круга задач? у меня нет ответа.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 3:12 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
theonlymirage писал(а):
Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования.

Много шума из ничего. Если всё-таки использовать многозадачность, то кто мешает начинать новый поток с вызова функции 5 и зацикливать его в случае типа setInterval?


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 3:25 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 252
tsdima писал(а):
theonlymirage писал(а):
Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования.

Много шума из ничего. Если всё-таки использовать многозадачность, то кто мешает начинать новый поток с вызова функции 5 и зацикливать его в случае типа setInterval?

мешает разрастание программы


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 3:28 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 252
Вообще можно отследить какие часто функции используются во многих программ, это например строковые ф-ции strcpy, strcmp, memcpy, и тд я видел есть даже реализации в самом ядре, почему их не выносят в прерывание? Ведь это уменьшило код почти всех программ?


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 4:03 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
pavelyakov писал(а):
почему их не выносят в прерывание?

Ты хоть примерно представляешь, что делает процессор при выполнении инструкции int 0x40?


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 4:31 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 252
tsdima писал(а):
pavelyakov писал(а):
почему их не выносят в прерывание?

Ты хоть примерно представляешь, что делает процессор при выполнении инструкции int 0x40?

Я понял, тут сглупил, но все де надо что-то придумать на подобии PE dll


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 7:43 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
pavelyakov писал(а):
надо что-то придумать на подобии PE dll

Есть библиотеки .obj в формате MS COFF.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Вт авг 28, 2018 9:28 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3952
Цитата:
Я это все смог реализовать на языке Си в программе для колибри, это возможно реализовать как системную функцию?

А зачем системная функция, если уже реализуется существующими функциями API?
Если использовать фьютекс, можно сделать ожидание с прерыванием.


Вернуться к началу
 Заголовок сообщения: Re: Предлагаю добавить 2 функции
СообщениеДобавлено: Ср авг 29, 2018 8:52 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
pavelyakov писал(а):
Я это все смог реализовать на языке Си в программе для колибри
Ну так ты ведь и так уже реализовал. Выноси в библиотеку тогда и используй.
pavelyakov писал(а):
Вообще можно отследить какие часто функции используются во многих программ, это например строковые ф-ции strcpy, strcmp, memcpy, и тд я видел есть даже реализации в самом ядре, почему их не выносят в прерывание?
facepalm В идеале всё, что может быть вынесено из ядра — лучше оттуда вынести. И не так давно были планы по выносу GUI из ядра, а у тебя всё наоборот — предлагаешь запихнуть в ядро неядерные функции.
pavelyakov писал(а):
Ведь это уменьшило код почти всех программ?
Ага, а ещё быстродействие. Ты, наверное, хочешь, чтобы как в MenuetOS
Код:
151 - Mathlib

       NOTE: Volatile registers for every math function: rax,rbx and xmm0-xmm5

       Packed double

         In : rbx - 00 - cosine packed double

              xmm0 -  x

         Out: xmm0 -  cos(x)

         In : rbx - 01 - sine packed double

              xmm0 -  x

         Out: xmm0 -  sin(x)
....................................         
pavelyakov писал(а):
Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность.
И снова facepalm. Для этого НЕ нужно многопоточность. Вот к чему приводит нежелание думать.

Очередной велосипед.

pavelyakov писал(а):
реализовать 2 функции, которые будут работать как в JavaScript: setTimeOut, SetInterval. Смысл такой setTimeOut, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции.
Смысл такой setInterval, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции и все это выполняется в цикле.
ClearInterval - убивает процесс
У тебя всё это есть уже!!! Тебе не нужно что-то ещё добавлять в ядро для этого — неужели это не доходит? Что за идиотское желание пихать всякую херь в ядро???


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 15 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB