Могу ли я использовать waitForReadyRead в QThread, который принадлежит mainthread?


У меня есть QThread, который содержит QUDPsocket (сокет не является локальным членом QThread:: run (), возможно, мне следует изменить это из того, что я читаю). Этот QThread создается в моем классе QMainWindow, то есть в потоке GUI(я не вызываю move to thread). По-прежнему ли безопасно использовать waitForReadyRead или мне абсолютно необходимо создать экземпляр QThread в main.cpp или вызвать moveToThread() для того, чтобы быть потокобезопасными. Я получаю прерывистое двойное свободное исключение внутри вызова waitForReadyRead in настоящий способ делать это(иногда я не получаю его в течение нескольких дней, иногда через 3 минуты).

1 2

1 ответ:

Взгляните на документацию Qt Для QUdpSocket. Там есть заметка, объясняющая, что класс являетсяреентерабельным . Также из документации Qt:

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

Таким образом, чтобы ответить на ваш вопрос, на самом деле не имеет значения, кто является родителем QThread, Если вы убедитесь, что используемый экземпляр QUdpSocket создается в контексте потока, в котором он используется.