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 に答える