2016-08-12 14 views
1

main()のスレッドにないQCoreApplicationオブジェクトを作成することはできますか?このコードに続いて

#include <QDebug> 
#include <QCoreApplication> 
#include <QThread> 
#include <thread> 

int main(int argc, char *argv[]) 
{ 
    // qDebug() << "Whatever"; <- uncommenting this makes the constructor to print a warning 
    std::thread thread([&]() 
    { 
     QCoreApplication app(argc, argv); 
     qDebug() << "main thread is " << app.thread(); 
    }); 
    thread.join(); 
    qDebug() << "current thread is " << QThread::currentThread(); 

    return 0; 
} 

これは、コンパイルし、クラッシュしない、実行時に警告なし。 QCoreApplicationはmain()のスレッドではなく作成されます。

WARNING: QApplication was not created in the main() thread. 

それがメイン()のスレッドでQCoreApplicationを作成することが有効ではありません:qDebug()関数呼び出しはQCoreApplicationオブジェクトを作成する前に、コメント解除されている場合

しかし、警告が印刷されていますか?

+1

なぜあなたはそれをしたいのか正確に教えてください。ほとんどの場合、必要はありません! –

+0

ええ、確かにそのようなものの使い方が何であるかについての質問は良いでしょう! – sandwood

答えて

1

documentationからと、それは有効ですが、お勧めできません:

一般に

、我々はあなたが早けれ

可能な限りあなたのmain()関数でQCoreApplication、QGuiApplicationかはQApplicationオブジェクトを作成することをお勧めします
+1

少し違ってそれを読んで、私はインスタンスがメインスレッドで作成されたことを暗示していると主張します。 –

+0

@JonHarper '* Application'のインスタンスを作成することはユーザに任せられているので、ドキュメントは何もできませんが、何かをお勧めします。 OPは言ったように、彼は別のスレッドでもそれを作成することに成功したので、私は答えの1つが意味のある解釈であると思います。とにかく、良い視点。 – skypjack

+0

@skypjack、私は、メインループではないMac OS上でイベントループを動作させることはできないと聞いてきました。 – Velkan

関連する問題