http://www.boost.org/boost-build2/doc/html/bbv2/installation.html
尝试遵循这些说明,但它们不起作用.
我做了什么:
打开cmd.exe; cd C:\ BoostBuild\boost-build.\ bootstrap.bat
我得到了什么:
C:\ BoostBuild\boost-build>.\ bootstrap.bat'.\ bootstrap.bat'未被识别为内部或外部命令,可运行程序或批处理文件.
简而言之:
在什么情况下可以在单个核心上运行多线程应用程序破坏性能?
如何将多线程应用程序的亲和力设置为仅使用一个核心?
长期:
我正试图在它自己的线程上运行2D引擎的物理特性.它起作用,并且起初表现似乎正常,但我决定告诉游戏尝试以10K FPS运行并且物理速度为120FPS,进入任务管理器并将亲和力设置为程序只能使用一个核心.
在将亲和力设定为一个核心之前,FPS在~1700,然后达到~70FPS.我没想到那种减少.我告诉游戏尝试以300 FPS和60FPS的物理速度运行.
同样的事发生了.
我没有多想,所以我只是继续修改引擎.我在更改了一些绘图代码,300 FPS,60FPS物理后再次测试了它.允许所有核心管理300FPS就好了,单核FPS的亲和力下降到4.现在我知道在单核上运行多线程应用程序可能不是那么糟糕,或者我不知道发生什么时发生的事情您将亲和力设置为单个核心.
这是关于渲染/物理运行的方式......
循环开始
收集输入直到(1.0/FPS)过去.
致电更新.
锁定物理线程互斥体,因为游戏中的东西将使用物理数据,我不希望引擎更新任何内容,直到此更新调用中的所有内容都完成.
更新游戏中的所有内容,可以将渲染功能对象(包含绘制内容,绘制位置,如何绘制)发送到渲染队列.
解锁互斥锁.
渲染器在每个函数对象上调用operator()并将其从队列中删除.
更新屏幕.
重复循环.
物理线程循环:
ALLEGRO_TIMER* timer(al_create_timer(1.0f / 60.0f));
double prevCount(0);
al_start_timer(timer);
while(true)
{
auto_mutex lock(m_mutex);
if(m_shutdown)
break;
if (!m_allowedToStep)
continue;
// Don't run too fast. This isn't final, just simple test code.
if (!(al_get_timer_count(timer) > prevCount))
continue;
prevCount = al_get_timer_count(timer);
m_world->Step(1.0f / 60.0f, 10, 10);
m_world->ClearForces();
}
Run Code Online (Sandbox Code Playgroud)
//注意:Auto mutex只是我创建的一个非常简单的对象,用于在构造函数中锁定互斥锁并在析构函数中解锁它.我正在使用Allegro 5的线程功能.
我从这里下载了visual2008文件(http://luaplus.org/projects/luaplus/files),但我不知道如何将它添加到我的项目中.它不像其他库,我只需要将include目录添加到我的Visual Studio文件夹,并将bin添加到我的system32或项目文件夹.也没有头文件.我正在使用Visual Studio 2010专业版.