Как сигнал и слоты реализованы под капотом?

Другой подход (который избегает многих сложных деталей) в Windows при использовании HTTP должен использовать HTTP.SYS. Это позволяет нескольким процессам слушать различные URL на том же порте. На Сервере 2003/2008/Vista/7 это - то, как IIS работает, таким образом, можно совместно использовать порты с ним. (На XP поддерживается SP2 HTTP.SYS, но IIS5.1 не использует его.)

Другие API высокого уровня (включая WCF) используют HTTP.SYS.

23
задан HostileFork 7 January 2010 в 22:30
поделиться

1 ответ

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

Каждый раз, когда вы испускаете сигнал, то есть пишете

emit something();

, вы фактически вызываете что-то () , которую он автоматически генерирует компилятором метаобъектов и помещает в файл * .moc . В этой функции проверяется, к каким слотам этот сигнал подключен в данный момент, и соответствующие функции слотов (которые вы реализовали в своих собственных источниках) последовательно вызываются через таблицы символов (как описано выше). И emit , как и другие специфичные для Qt ключевые слова, просто отбрасываются препроцессором C ++ после *. moc . Действительно, в одном из заголовков Qt ( qobjectdefs.h ) есть такие строки:

#define slots 
#define signals protected
#define emit

Функция соединения ( connect ) просто изменяет таблицы символов, поддерживаемые в * Файлы .moc и переданные им аргументы (с макросами SIGNAL () и `SLOT) также предварительно обрабатываются для соответствия таблицам.

Это общая идея. В своем другом ответе ジ ョ ー ジ предоставляет нам ссылки на список рассылки trolltech и на еще один вопрос SO по этой теме.

и переданные ему аргументы (с макросами SIGNAL () и `SLOT) также предварительно обрабатываются для соответствия таблицам.

Это общая идея. В своем другом ответе ジ ョ ー ジ предоставляет нам ссылки на список рассылки trolltech и на еще один вопрос SO по этой теме.

и переданные ему аргументы (с макросами SIGNAL () и `SLOT) также предварительно обрабатываются для соответствия таблицам.

Это общая идея. В своем другом ответе ジ ョ ー ジ предоставляет нам ссылки на список рассылки trolltech и на еще один вопрос SO по этой теме.

16
ответ дан 29 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: