Могу ли я использовать waitForReadyRead в QThread, который принадлежит mainthread?
У меня есть QThread, который содержит QUDPsocket (сокет не является локальным членом QThread:: run (), возможно, мне следует изменить это из того, что я читаю). Этот QThread создается в моем классе QMainWindow, то есть в потоке GUI(я не вызываю move to thread). По-прежнему ли безопасно использовать waitForReadyRead или мне абсолютно необходимо создать экземпляр QThread в main.cpp или вызвать moveToThread() для того, чтобы быть потокобезопасными. Я получаю прерывистое двойное свободное исключение внутри вызова waitForReadyRead in настоящий способ делать это(иногда я не получаю его в течение нескольких дней, иногда через 3 минуты).
1 ответ:
Взгляните на документацию Qt Для
QUdpSocket
. Там есть заметка, объясняющая, что класс являетсяреентерабельным . Также из документации Qt:Таким образом, чтобы ответить на ваш вопрос, на самом деле не имеет значения, кто является родителем...класс считается реентерабельным, если его функции-члены могут безопасно вызываться из нескольких потоков, если каждый поток использует другой экземпляр класса.
QThread
, Если вы убедитесь, что используемый экземплярQUdpSocket
создается в контексте потока, в котором он используется.