Pregunta

Me parece que esté recibiendo una excepción generada solamente con un hilo creado con Qtconcurrent :: run

tengo una clase llamada FPSengine que tiene un método denominado FPSengine :: getData () que es llamado por el hilo principal y otros 3 hilos (2 QThreads y 1 hecho con QtConcurrent :: run ()). Dentro FPSengine :: getData () que llama QTIME :: horaActual (). Si llamo FPSengine :: getData () desde el hilo principal o uno de los QThreads no tengo ningún problema, pero cuando llamo FPSengine :: getData () del hilo creado con Qtconcurrent :: run () a veces se produce una excepción. ¿Puede haber algo mal con Qtconcurrent o QTIME: horaActual () o incluso tzset (que es llamada por QTIME :: horaActual de lo que muestra la pila BGF)? ¿O hay algo malo en mi código. Aquí está la información de pila de la rosca en su defecto:
0 0
aumento /lib/libc.so.6 1 abortar /lib/libc.so.6 0
2 ?? /lib/libc.so.6 0
3 ?? /lib/libc.so.6 0
4 libre /lib/libc.so.6 0
5 ?? /lib/libc.so.6 0
6 tzset /lib/libc.so.6 0
7 QTIME :: horaActual () /usr/lib/libQtCore.so.4 0
8 FPSengine :: xmitData FPSengine2.cpp 93
9 FPSengine :: getData FPSengine2.cpp 21
10 threadDatalog :: ejecutar threaddatalog.cpp 109
11 ?? /usr/lib/libQtCore.so.4 0
12 start_thread /lib/libpthread.so.0 0
13 clon /lib/libc.so.6 0 14 ?? 0

¿Fue útil?

Solución

QTime::currentTime() (o cualquiera de las funciones QTime, en realidad) no están documentados como siendo concurrente. Además, dudo que la llamada subyacente (tzset) está diseñado para la concurrencia mango muy bien. En consecuencia, es probable que necesite añadir algún tipo de protección, tales como un mutex, en torno a la llamada para obtener la hora actual para evitar el acceso simultáneo. No sé si esto va a resolver su problema, pero probablemente ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top