3

我正在阅读一篇关于 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()可以在这里找到。

4

3 回答 3

6

它看起来像一个错字。按照这里,后面应该有分号Sys_StartAsyncThread();

于 2013-01-26T21:55:27.590 回答
4

正如人们所提到的,这只是我用来为每个方法的内容排序的符号:展开循环和方法。

在示例中,您提供的大括号之间的块实际上是方法的内容

Sys_StartAsyncThread

于 2013-01-29T04:49:47.557 回答
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,如您所引用的页面中所述。

有关更多详细信息,这里是我在阅读代码时用作地图的完全展开的循环。

于 2013-01-26T21:56:24.753 回答