Utilizando QWidget :: update () desde un hilo no GUI

A veces mi aplicación se bloquea en QWidget :: update () que se está ejecutando en un subproceso que no es GUI.

stoy desarrollando una aplicación en la que recibe cuadros de video del host remoto y los visualizo en QWidget.

Para este propósito, uso la biblioteca libVLC que me da una imagen decodificada. Recibo una imagen en la devolución de llamada libVLC, que se realiza en un hilo libVLC separado. En esta devolución de llamada, estoy tratando de realizar el método QWidget :: update (). A veces, la aplicación se bloquea y callstack está en algún lugar de este método. Aquí está el código de mi devolución de llamada:

//! Called when a video frame is ready to be displayed, according to the vlc clock. 
//! \c picture is the return value from lockCB().

void VideoWidget::displayCB(void* picture)
{
    QImage* image = reinterpret_cast<QImage*>(picture);

    onScreenPixmapMutex_.lock();
    onScreenPixmap_ = QImage(*image);
    onScreenPixmap_.detach();
    onScreenPixmapMutex_.unlock();

    delete image;

    update();
}

Sé que las operaciones GUI fuera del hilo principal no están permitidas en Qt. Pero de acuerdo con la documentación, QWidget :: update () solo programa un evento de pintura para su procesamiento cuando Qt regresa al bucle principal del evento y no causa un repintado inmediato.

La pregunta es: ¿la regla "no se permiten operaciones GUI fuera del hilo principal" aplicable a QWidget :: update ()? ¿Esta operación pertenece a "operaciones GUI"?

Yo uso Qt 4.7.3, el bloqueo se repite en Windows 7 y Linux.

Respuestas a la pregunta(4)

Su respuesta a la pregunta