2017-08-06 12 views
0

私は、OpenSceneGraph-3.4.0とQt 5.9のGUI(そうでなければVisual Studio 2015と2017)を使って私の修士論文のプログラムを開発しています。仕事のすべてはうまくいきますが、今では自宅で新しいコンピュータを稼働させようとしました。Qt 5.9スレッドのプロセッサアフィニティをリージェンと結びつける方法7

しかし、私は見る人のためのフレーム()メソッドを呼び出したとき、私は具体的には以下の行では、setProcessorAffinity(unsigned int cpunum)QtThread.cppで読み取りアクセス違反を取得:

QtThreadPrivateData* pd = static_cast<QtThreadPrivateData*>(_prvData); 

ここでは、完全な機能(QtThreadがあります.cppファイルは、OSGのOpenThreadsの一部)である:

OSGで、視聴者が osgViewer::Viewer::SingleThreadedに設定されているが、私は、私はエラーを取得し、その行を削除する場合で、「別のスレッドでQOpenGLContext電流を作ることができません」

​​ (これはOsgQtの一部です)、おそらくデッドエンドです。明確

ため


編集私は、ビューアオブジェクト:: osgViewerにframe()を呼び出します。 この関数では、ビューアはrealize()(Viewerクラスの関数)を呼び出します。 そこにはsetUpThreading()が呼び出されます(これはビューアベースクラスの関数です)。順番に これはそこでOpenThreads::SetProcessorAffinityOfCurrentThread(0) を呼び出して、以下のコードが実行されます。

Thread* thread = Thread::CurrentThread(); 
if (thread) 
    return thread->setProcessorAffinity(cpunum); 

(最初の行の後に)スレッドは、私には、エラーのように見える値0x00000000fdfdfdfdを持っています。 いずれにせよ、最後の呼び出しは、私が最初の質問に投稿したものです。


私はこの修正をどこから始めるべきかについての考えも持っていません。私は、それはいくつかのプロセッサ関連の問題だと思います。私のプロセッサはRyzen 7 1700です(仕事ではIntel i7 3770k)ので、おそらくそれが役に立ちます。 それ以外の場合は、自宅でWindows 10を使用しています。仕事ではWindows 7です。

ありがとうございました。

+0

問題はあなたが投稿していないコードです。誰が 'setProcessorAffinity()'を呼び出すのか? –

+0

元の質問にコードと実行パスを追加しました – Tare

+0

'Thread :: CurrentThread()'を 'main()'から直接呼び出すとどうなりますか? QApplicationオブジェクトを構築した後、 'main()'から 'app.thread()'を呼び出すとどうなりますか? –

答えて

0

最後に、OpenThreads(と私は何もできないOpenSceneGraphの部分)に問題があるようです。 OpenSceneGraphソースにcmakeを使用する場合、無効にする必要があるオプション "BUILD_OPENTHREADS_WITH_QT" があります

解決策が見つかりましたthis thread in the OSG forum、この男のおかげです。

関連する問題