gpt4 book ai didi

c++ - boost:thread 使 Microsoft C++ 编译器崩溃

转载 作者:搜寻专家 更新时间:2023-10-31 00:49:24 25 4
gpt4 key购买 nike

我的问题的简要版本:

此代码使编译器崩溃。

pThread[0] = new boost::thread(
boost::bind(
&cGridAnimator::DoJob, // member function
this ), // instance of class
0 ); // job number

编译器在尝试编译此代码时崩溃。 (当我运行这段代码时崩溃的不是我的程序!)

需要修复什么?


问题的长版

我将大型 3D 网格上的工作拆分为 8 个单独的作业,以在单独的线程中运行,以便利用 8 核机器。

这非常有效:

    JOB_LOOP {
pThread[kjob] = new boost::thread( ::DoJob, kjob );
}

全局自由函数 DoJob 根据作业编号从 cGridAnimator 的全局实例中读取数据。

但是,我不喜欢所有这些 float 的全局变量,也不喜欢必须使用这么多访问器方法来获取必要的数据。使用 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'.

最佳答案

将代码改成:

pThread[0] = new boost::thread(boost::bind(&cGridAnimator::DoJob, this, 0 ));  

此代码为线程提供了一个 void (void) 函数,而不是一个 void (int) 函数和一个额外的参数。

关于c++ - boost:thread 使 Microsoft C++ 编译器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com