Документация Qt и повторный вход

Документация Qt заявляет это о поточной безопасности и повторного входа:

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

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

Однако в документации QRect а также QPointНапример, не упоминается ни о безопасности потоков, ни о повторном входе, но мне трудно поверить, что это не так. По факту, эта старая дискуссия говорит «недостаток» в документации:

Эти классы являются просто обычными данными (несколько примитивов), не имеют общих структурированных или статических данных, поэтому они реентерабельны. То, что они не помечены как таковые, является недостатком нашей документации.

Итак, как мы должны знать, является ли функция реентерабельной или нет? Заметка о повторном входе опущена только для простых классов, где она подразумевается очевидностью?

17

Решение

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

Согласно определению Qt для повторного входа, существует два критерия для определения, является ли класс Qt реентерабельным:

  1. У него нет статических данных.
  2. Он вызывает только реентерабельные функции и методы других реентерабельных классов.

Доступ к одноэлементному классу нарушил бы 2.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]