我的問題的簡短版本:boost:線程崩潰微軟C++編譯器
此代碼崩潰了編譯器。
pThread[0] = new boost::thread(
boost::bind(
&cGridAnimator::DoJob, // member function
this), // instance of class
0); // job number
嘗試編譯此代碼時,編譯器崩潰。 (當我運行這個代碼時,這不是我的程序!)
什麼需要修復?
問題
我分手了在大型3D網格工作納入8個單獨工作的龍版在單獨的線程中運行,以便採取一個8芯機的優勢。
這完美的作品:
全球免費功能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'.
你所說的「崩潰意思「?報告內部編譯器錯誤? – 2009-08-21 17:08:25
這裏我沒有看到任何「編譯器崩潰」。我甚至沒有看到編譯器錯誤!你得到的只有2個來自C++編譯器的警告,然後是來自'vcbuild'的錯誤。我強烈懷疑你1)正在編譯/ W4,2)在'.vcproj'文件中有一些錯誤。請顯示項目文件。 'cGridAnimator :: DoJob()'的簽名也是有幫助的。 – 2009-08-21 17:19:02
你是對的那部分。一個ICE通常被打印到生成日誌,並且應用程序崩潰通常不會導致errorlevel = 1 ...愚蠢的我。 – gimpf 2009-08-21 17:23:16