我正在阅读关于Doom 3源代码的代码质量的博客文章,我已经陷入了一段我无法理解的C ++代码。我应该说我不是C ++程序员。
违规代码如下:
Sys_StartAsyncThread(){ // The next look runs is a separate thread.
while ( 1 ){
usleep( 16666 ); // Run at 60Hz
common->Async(); // Do the job
Sys_TriggerEvent( TRIGGER_EVENT_ONE ); // Unlock other thread waiting for inputs
pthread_testcancel(); // Check if we have been cancelled by the main thread (on shutdown).
}
}
(取自http://fabiensanglard.net/doom3/index.php,主题为“展开循环”)
这看起来是一个闭包作为参数传递给Sys_StartAsyncThread()
的返回值 - 但据我所知,这在C ++中是不可能的,并且Sys_StartAsyncThread()
也是void类型,所以这是怎么回事?
可以找到Sys_StartAsyncThread()
的定义{。{3}}。
答案 0 :(得分:6)
这看起来像一个错字。根据{{3}},Sys_StartAsyncThread();
之后应该有分号。
答案 1 :(得分:4)
正如人们所提到的,这只是我使用的符号,用于每个方法的内容:展开循环和方法。
在您提供的示例中,大括号之间的块实际上是方法的内容
Sys_StartAsyncThread
合
答案 2 :(得分:2)
这只是一个错字。正确的代码是
Sys_StartAsyncThread();
{
// Create a thread that will block on hTimer in order to run at 60Hz (every 16 milliseconds).
// The Thread calls common->Async over and over for Sound mixing and input generation.
while ( 1 )
{
usleep( 16666 );
common->Async();
Sys_TriggerEvent( TRIGGER_EVENT_ONE );
pthread_testcancel();
}
}
您可以在此处http://fabiensanglard.net/doom3/doom3_unrolled.php查看,如您所推荐的页面中所述。
有关详细信息,请参阅我用作地图的完全展开循环 在阅读代码时。