【问题标题】:exception generated with qtconcurrent and calling QTime:currentTime使用 qtconcurrent 生成异常并调用 QTime:currentTime
【发布时间】:2010-02-03 21:10:44
【问题描述】:

我似乎只使用使用 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 中止 /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 线程数据日志::运行线程数据日志.cpp 109
11 ?? /usr/lib/libQtCore.so.4 0
12 start_thread /lib/libpthread.so.0 0
13 克隆 /lib/libc.so.6 0 14 ?? 0

【问题讨论】:

    标签: qt glibc libc qthread qtconcurrent


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我能够更改我的代码以不再使用这些调用,问题确实消失了
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多