私の質問の簡単なバージョン:boost:スレッドがMicrosoft C++コンパイラをクラッシュする
このコードはコンパイラをクラッシュさせます。
pThread[0] = new boost::thread(
boost::bind(
&cGridAnimator::DoJob, // member function
this), // instance of class
0); // job number
このコードをコンパイルしようとすると、コンパイラがクラッシュします。 (私はこのコードを実行するときに私のプログラムは、ひどいですか?)
何が修正する必要がありますか? 8コアのマシンを利用するように質問
私は8つの別々の仕事に大きな3Dグリッド上で作業を分割していますの
ロングバージョンは、別々のスレッドで実行されます。
これは完璧に動作します:
グローバルfree関数のDoJobは、ジョブの数に応じて、cGridAnimatorのグローバルインスタンスからデータを読み込みます。
しかし、これらのすべてのグローバルが浮かんでいるのは好きではありません。必要なデータを取得するために多くのアクセサメソッドを使用する必要はありません。 cGridAnimatorのメソッドを使用する方がはるかに整頓されます。
したがって、この質問の先頭にあるコードです。
しかし、MSVC++ 2008でコンパイルすると、コンパイラは次の苦情を出してクラッシュします。
1>Compiling...
1>mfm1.cpp
1>C:\Program Files\boost\boost_1_38_0\boost/bind.hpp(1643) : warning C4180: qualifier applied to function type has no meaning; ignored
1> C:\Program Files\boost\boost_1_38_0\boost/bind.hpp(1677) : see reference to class template instantiation 'boost::_bi::add_cref<Pm,I>' being compiled
1> with
1> [
1> Pm=void (__thiscall cGridAnimator::*)(int),
1> I=1
1> ]
1> .\mfm1.cpp(158) : see reference to class template instantiation 'boost::_bi::dm_result<Pm,A1>' being compiled
1> with
1> [
1> Pm=void (__thiscall cGridAnimator::*)(int),
1> A1=cGridAnimator *
1> ]
1>C:\Program Files\boost\boost_1_38_0\boost/mem_fn.hpp(318) : warning C4180: qualifier applied to function type has no meaning; ignored
1> C:\Program Files\boost\boost_1_38_0\boost/bind/bind_template.hpp(344) : see reference to class template instantiation 'boost::_mfi::dm<R,T>' being compiled
1> with
1> [
1> R=void (int),
1> T=cGridAnimator
1> ]
1>Project : error PRJ0002 : Error result 1 returned from 'C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe'.
をCL.EXEません。 "?内部コンパイラエラーを報告しますか? –
ここには「コンパイラクラッシュ」はありません。私もコンパイラのエラーは表示されません!あなたが得るのは、C++コンパイラからの2つの警告、そして 'vcbuild'からのエラーです。私はあなたが1)/ W4でコンパイルしていることと、2)あなたの '.vcproj'ファイルに何らかのエラーがあることを強く疑う。プロジェクトファイルを表示してください。 'cGridAnimator :: DoJob()'の署名も役に立ちます。 –
あなたはその部分にぴったりです。通常はICEがビルドログに出力されますが、アプリケーションのクラッシュは通常errorlevel = 1 ... Dumb meにはなりません。 – gimpf