2016-07-21 2 views
1

私はQueryPerformanceFrequencyでスケジュールすることについていくつかのコードを見ています。私はここで何が起こっているのか理解できません。 rvalueが括弧で囲まれているのはなぜですか? LARGE_INTEGERは構造体なので、初期化するには{}が必要ですが、この行は完全に混乱します。 QueryPerformanceFrequencyはboolも返します。このLARGE_INTEGER行を理解できません

// Initialize the resolution of the timer 
LARGE_INTEGER Timer::m_freq = (QueryPerformanceFrequency(&Timer::m_freq), Timer::m_freq); 

ヘッダは、プライベートメンバとタイマーの構造体が含まれています

static LARGE_INTEGER m_freq; 
+1

それはコンマ演算子です。それはひどく虐待されている。 –

+2

うわー。変数をそれ自身と等しくなるように初期化する。それが法的であるかどうか疑問に思いますか? –

+0

iffyコーディングの習慣についての通常のアドバイスは、あなたがどこに住んでいるかを知っている殺人狂人のようにいつかあなたのコードを維持しなければならない人を扱うことです。明らかにここの問題はあなたが住所を持っていないということです。我々はどちらも知らない。 –

答えて

1

それは悪いです。コメント者が言ったように、ちょっと悪い。

QueryPerformanceFrequencyは安価な呼び出しでなければならないため、グローバル(静的)変数としてキャッシュする必要はほとんどありません。

代わりにこれを行います。

  1. static宣言をクラス宣言のm_freq変数から削除します。

  2. Timerクラスのコンストラクタでm_freqを初期化します。

例:

Timer::Timer() 
{ 
    BOOL result = QueryPerformanceFrequency(&m_freq); 

    if (result==FALSE) 
    { 
     // optional - set error condition. But it's not like 
     // the original code was handling the potential error either 
    } 
} 
関連する問題