5
ho scoperto che anche una semplice attesa sul QMutex causerà asserzione. Cosa potrei fare di sbagliato?In attesa di QMutex afferma
QMutex mutex;
SyncMgr::SyncMgr(QObject *parent) : QObject(parent)
{
moveToThread(&thread );
thread.start();
process = new QProcess(this);
connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(onReadyReadStandardOutput()));
connect(process, SIGNAL(readyReadStandardError()), this, SLOT(onReadyReadStandardError()));
}
SyncMgr::~SyncMgr()
{
delete process;
}
void SyncMgr::onConnected()
{
cmdDispatcher.sendGetSerialNo();
// this asserts
waitForResponse.wait(&mutex); // waitForResponse is CWaitCondition object
// ...
}
ottengo affermare e il messaggio di errore è:
ASSERT: 'copia' nel thread \ qmutex.cpp, linea 525
Questo può avere a che fare con la 'modalità ricorsione' per QMutest. Imposta RecursionMode su Recursive durante la creazione del mutex? Il mutex – AlexanderVX
dovrebbe essere un membro della classe e devi bloccarlo (usa QMutexLocker) prima di chiamare wait(). Non sono sicuro se questo è correlato all'asserzione però. –
@AlexanderVX Ho provato entrambi e nulla è cambiato. – zar