Frage

Ich scheine eine Ausnahme nur mit Qtconcurrent erstellt :: run

mit einem Gewinde erzeugt werden immer

Ich habe eine Klasse mit dem Namen FPSengine, die ein Verfahren benannt hat FPSengine :: getData (), die von dem Haupt-Thread und 3 andere Gewinde (2 QThreads und 1 hergestellt mit QtConcurrent :: run ()) aufgerufen wird. Innerhalb FPSengine :: getData () Ich nenne QTime :: current (). Wenn ich FPSengine :: getData () aus dem Haupt-Thread oder eine der QThreads rufen nicht, dass ich irgendwelche Probleme haben, aber wenn ich FPSengine :: getData () aus der mit Qtconcurrent erzeugten Thread aufrufen :: run () ich manchmal eine Ausnahme erhalten. Könnte es etwas falsch mit Qtconcurrent oder QTime sein: current () oder sogar tzset (die von QTime genannt :: current von dem, was die GDB-Stack zeigt)? Oder gibt es etwas falsch mit meinem Code. Hier ist die Stack Info des versagenden Thread:
0 raise /lib/libc.so.6 0
1 Abbruch /lib/libc.so.6 0
2 ?? /lib/libc.so.6 0
3 ?? /lib/libc.so.6 0
4 frei /lib/libc.so.6 0
5 ?? /lib/libc.so.6 0
6 tzset /lib/libc.so.6 0
7 QTime :: current () /usr/lib/libQtCore.so.4 0
8 FPSengine :: xmitData FPSengine2.cpp 93
9 FPSengine :: getData FPSengine2.cpp 21
10 threadDatalog :: run threaddatalog.cpp 109
11 ?? /usr/lib/libQtCore.so.4 0
12 start_thread /lib/libpthread.so.0 0
13 Klon /lib/libc.so.6 0 14 ?? 0

War es hilfreich?

Lösung

QTime::currentTime() (oder eine der QTime Funktionen, wirklich) werden als gleichzeitig nicht dokumentiert. Außerdem bezweifle ich, dass der zugrunde liegende Anruf (tzset) zu Griff Gleichzeitigkeit sehr gut ausgebildet ist. Dementsprechend müssen Sie wahrscheinlich einen gewissen Schutz, wie ein Mutex hinzuzufügen, um den Anruf die aktuelle Zeit, um den gleichzeitigen Zugriff zu verhindern. Ich weiß nicht, ob dies Ihr Problem lösen, aber es wird wahrscheinlich Hilfe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top