OpenGL: событие Fire при создании новой геометрии - PullRequest
1 голос
/ 22 июля 2010

В частности, я работаю в среде Linux.Это приложение opengl.После расчета определенных геометрий я хочу иметь возможность инициировать событие всякий раз, когда создается новая геометрия.Есть ли какой-нибудь .NET-эквивалент событий в C ??

Спасибо, Вишну

Ответы [ 4 ]

0 голосов
/ 22 июля 2010

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

Вы можете использовать signalсказать, как должен обрабатываться конкретный сигнал, и raise, чтобы отправить конкретный сигнал.Однако обратите внимание, что существуют серьезные ограничения на то, что вы можете делать в обработчике сигналов.Множество кода на самом деле написано не для того, чтобы хорошо справляться с сигналами, и в значительной степени это предполагает, что практически любой сигнал подразумевает такую ​​серьезную проблему, что дальнейшее выполнение после сигнала может быть проблематичным.

0 голосов
/ 22 июля 2010

С библиотеками гномов или gtk + (что построено поверх него)?Вы можете сделать все это самостоятельно с помощью указателей на функции, но это единственная «стандартная» библиотека C, в которой я лично использовал стандартизированные события и обратные вызовы.Наверное, есть и другие.

0 голосов
/ 22 июля 2010

Для перевода с .NET land:

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

«Делать» - это функция в C и C ++.

Если вы хотите «сделать» только одну вещь при «событии». Вы бы передали указатель на свою функцию, которую вы хотите «сделать» над своим «событием», в качестве указателя на функцию, вызывающую «событие». Это называется callback . Другие посты содержат множество примеров того, как это работает.

Если вам нужно «сделать» несколько вещей в «событии», вам нужно использовать реализацию сигнала / слота, такую ​​как boost :: signal . Или, если у OpenGL есть нечто подобное, я бы использовал это. В этом случае у вас есть несколько обратных вызовов .

0 голосов
/ 22 июля 2010

События в C реализуются с использованием обратных вызовов функций . У связанного вопроса есть пара ответов, в которых рассматривается, как кодировать обратные вызовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...