Могу ли я использовать waitForReadyRead в QThread, который принадлежит mainthread? - PullRequest
2 голосов
/ 27 февраля 2010

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

1 Ответ

1 голос
/ 28 февраля 2010

Посмотрите документацию Qt для QUdpSocket. Там есть примечание, объясняющее, что класс reentrant . Также из документации Qt :

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

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

...