LINUX.ORG.RU

API для библиотеки

 , ,


0

1

Проектирую библиотеку. В библиотеке должен крутиться цикл. Библиотека предполагается будет работать с разными UI-мордами. UI-морды обычно сами в себе крутятся на цикле. Соответственно вопрос - как скрестить эти два цикла? Вырисовываются два варианта - экспортировать итерацию внутреннего цикла библиотеки наружу, чтобы её можно было вструмить в цикл UI или наоборот - делать API для вструмления итерации UI во внутренний цикл библиотеки. Что посоветуете? Какие есть примеры реализации того и другого варианта, что можно изучить и пощупать?


Я надеюсь циклы блокируются, когда ивентов нету?

nanoolinux ★★★★
()

Смотря что за циклы в твоей либе. Если там тупо вычисления без I/O, то я бы не стал заморачиваться с итерациями (это может быть полезно, но когда ты это поймёшь, на лор за советом ходить не будешь). Кому нужна интерактивность, запустит твою функцию в отдельном потоке.

Если есть ожидание I/O, то в идеале должны быть две функции: 1) выдать список дескрипторов, которыми либа (объект) сейчас заинтересована; 2) обработать события на дескрипторах. Тогда это можно легко встроить в любой event loop.

const86 ★★★★★
()
Ответ на: комментарий от const86

Смотря что за циклы в твоей либе

Давай для пояснения расскажу. Есть либа. Мы ей говорим «отправь такое-то сообщение». Или «получи такие-то сообщения». Результат понятно либа асинхронно возвращает о колбэкам. Внутри себя либа как висит на I/O слушает сокеты, так и вызывает в отдельном потоке крипто-операции, отдельно операции с Б/Д. Я знаю как заснихронизировать основной поток где будут проводиться вызовы функций API либы с дочерними тредами либы. По сути это опрос каких-то триггеров. Т.е. так или иначе цикл. Выносить все внутренности и кишки этого цикла считаю неправильным, зачем. Такой вот расклад, так понятнее картина?

xusrol
() автор топика

Какие есть примеры реализации того и другого варианта, что можно изучить и пощупать?

http://freeglut.sourceforge.net/docs/api.php#EventProcessing

В glut доступны оба варианта.

glutMainLoop

The glutMainLoop function causes the program to enter the window event loop. An application should call this function at most once. It will call any application callback functions as required to process mouse clicks, mouse motion, key presses, and so on.

glutMainLoopEvent

The glutMainLoopEvent function causes freeglut to process one iteration's worth of events in its event loop. This allows the application to control its own event loop and still use the freeglut windowing system.

gv
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.