5
Odkryłem, że nawet proste oczekiwanie na QMutex spowoduje asercję. Co ja mogę robić źle?Oczekiwanie na QMutex zapewnia
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
// ...
}
mogę twierdzić, a komunikat o błędzie jest:
ASSERT: 'kopia' w gwint \ qmutex.cpp, linia 525
Może to mieć do czynienia z 'trybu rekursji' dla QMutest. Czy ustawiasz RekursionMode na Recursive podczas tworzenia mutex? – AlexanderVX
mutex powinien być członkiem klasy, i musisz go zablokować (użyj QMutexLocker) przed wywołaniem wait(). Nie jestem pewien, czy jest to związane z twierdzeniem. –
@AlexanderVX Próbowałem obu i nic się nie zmieniło. – zar