使用qtconcurrent生成异常并调用QTime:currentTime

时间:2010-02-03 21:10:44

标签: qt glibc libc qthread qtconcurrent

我似乎只是使用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(由gdb堆栈显示的QTime :: currentTime调用)? 或者我的代码有问题。这是失败线程的堆栈信息:
0提高/lib/libc.so.6 0
1 abort /lib/libc.so.6 0
2 ?? /lib/libc.so.6 0
3 ?? /lib/libc.so.6 0
4免费/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 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 clone /lib/libc.so.6 0 14 ?? 0

1 个答案:

答案 0 :(得分:1)

QTime::currentTime()(或任何QTime函数,确实)未记录为并发。另外,我怀疑底层调用(tzset)是为了很好地处理并发性而设计的。因此,您可能需要在调用周围添加一些保护(例如互斥锁)以获取当前时间以防止同时访问。我不知道这是否会解决你的问题,但它可能会有所帮助。

相关问题