***本記事にはプロモーションが含まれています。***
ハイパースレッド、マルチコア、SMPで動かない問題については、splauncherがうまく回避してくれます。中では、SetProcessAffinityMaskを使用してプロセッサを限定してプロセスを実行する、ということをやっています。
SetThreadAffinityMaskを使うと同様のことがスレッドでもできるそうです。似たものにSetThreadIdealProcessorというのがあって、こちらは強制じゃなくてできるだけ1つのプロセッサでということらしい。
Linuxでも、Linux 2.5.8以降sched_setaffinity, sched_getaffinityが導入され、glibc 2.3以降で利用可能になっているそうです。
マルチコアだと、パフォーマンスカウンタがプロセッサごとに違うという記述も見つけた。これもいずれ問題になるかも。すでにメーリングリストでは話題になっているけど。
実際の使用例を見ていると、プロセスのプライオリティをREALTIME_PRIORITY_CLASS、スレッドのプライオリティをTHREAD_PRIORITY_TIME_CRITICALにしてQueryPerformanceCounterしている。こういうものなのか。
http://www.flipcode.com/cgi-bin/fcarticles.cgi?show=64089