我似乎只在使用Qtconcurrent::run创建的线程中生成了异常
我有一个名为FPSengine的类,它有一个名为FPSengine::getData()的方法,该方法由主线程和其他3个线程调用(2个QThreads和1个使用QtConcurrent::run())。在FPSengine::getData()中,我调用QTime::currentTime()。如果我从主线程或某个QThreads调用FPSengine::getData(),我不会有任何问题,但是当我从用Qtconcurrent::run()创建的线程调用FPSengine::getData()时,我有时会得到一个异常。Qtconcurrent或QTime:currentTime()甚至tzset (由QTime::currentTime从gdb堆栈中调用)会不会有问题?还是我的代码出了什么问题。下面是失败线程的堆栈信息:
0提升/lib/libc.so.6 0
%1中止/lib/libc.so.6 %0
2 ??/lib/libc.so.6 %0
3 ??/lib/libc.so.6 %0
4 free /lib/libc.so.6 %0
5 ??/lib/libc.so.6 %0
6 tzset /lib/libc.so.6 %0
7 QTime::currentTime() /usr/lib/libQtCore.so.4 %0
8 FPSengine::xmitData FPSengine 2.cpp 93
9 FPSengine::getData FPSengine 2.cpp 21
10threadDatalog::运行threaddatalog.cpp 109
11 ??/usr/lib/libQtCore.so.4 %0
12 start_thread /lib/libpthread.so.0 %0
13 clone /lib/libc.so.6 0 14 ??0
发布于 2010-02-05 02:29:17
QTime::currentTime() (或者实际上是任何QTime函数)在文档中并不是并发的。此外,我怀疑底层调用(tzset)是否能够很好地处理并发。因此,您可能需要在调用周围添加一些保护,例如互斥锁,以获取当前时间以防止同时访问。我不知道这是否会解决你的问题,但它可能会有所帮助。
https://stackoverflow.com/questions/2195466
复制相似问题