SetThreadAffinityMask関数を理解するのに本当に苦労しています。QueryPerformanceCounter関数を使用してタイマーを実装しようとしていますが、スレッドアフィニティを正しく取得する方法がわかりません。msdnの男が次のコード例を投稿しました。
void HRTimer::StartTimer(void)
{
DWORD_PTR oldmask = ::SetThreadAffinityMask(::GetCurrentThread(), 0);
::QueryPerformanceCounter(&start);
::SetThreadAffinityMask(::GetCurrentThread(), oldmask);
}
しかし、このコードスニペットを採用すると、SetThreadAffinityMaskによって返されるoldmaskの値はゼロになります。MSDNで、戻り値がゼロの場合はエラーが発生したことを意味していることがわかりました。GetLastError()を呼び出して、ERROR_INVALID_PARAMETERのエラーコードを取得しました。上記のコードスニペットが正しくないかどうか疑問に思っています。たとえば、QueryPerformanceCounterがシステムの最初のCPUでのみ呼び出されるように、SetThreadAffinityMaskを正しく使用する方法を誰かに説明してもらえますか?または、SetThreadAffinityMaskがゼロを返すにもかかわらず、上記の例は正しいですか?
前もって感謝します。