我正在“搞乱”线程池,我注意到一个奇怪的异常。所以我在这里问你:我正确使用这个物体吗?或者您认为这只是一个错误或虚拟警告? 这里是。我用QThreadPool实现了一个基本的例子(它几乎与文档中的那个一样:http://qt-project.org/doc/qt-4.8/thread-basics.html#example-1-using-the-thread-pool)。
#include <QCoreApplication>
#include <QTimer>
#include <QRunnable>
#include <QThreadPool>
#include <QDebug>
class Work : public QRunnable
{
public:
void run()
{
qDebug() << "Hello from thread " << QThread::currentThread();
}
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
Work work;
work.setAutoDelete(false);
QThreadPool *threadPool = QThreadPool::globalInstance();
threadPool->start(&work);
qDebug() << "hello from GUI thread " << QThread::currentThread();
threadPool->waitForDone();
QTimer::singleShot(3000, &app, SLOT(quit()));
return app.exec();
}
如果我在状态栏中启动调试器,它会显示“正在运行”和“调试器已完成”等消息。它告诉我:
Exception at 0x75f6812f, code: 0x406d1388: Startup complete, flags 0x0 (first chance) in KERNELBASE!RaiseException
该程序有效,因为它写的是正确的东西而且没有挂起,但这条消息对我来说很奇怪。
我做错了吗?
谢谢
答案 0 :(得分:1)
这是第一次机会异常。它显然被代码捕获并处理,因为否则你的应用程序会崩溃。所以这不是问题。