2009-04-18 15 views
1

アップデート:私は問題を発見した - 、それは間違っているスレッドではなく、メイン1(プログラムの起動は厄介です...)SetThreadAffinityMaskは無視されます....任意のアイデアですか?

それはすべての今働いている中SetThreadAffinityを()を呼び出すしたまごつい/皮肉にも十分にすべてに感謝手伝い!私は私の小さなデバッグセッションに参加するためにアップしてくれました。

+0

スレッド数はいくつですか?いくつのプロセッサーですか?あなたはいくつかのスレッド、またはただ1つの親和性を設定していますか? –

+0

私は2つのCPUを持っています、私は1つのスレッドの親和性を設定しています。他のスレッドは現時点では実行されていません。 –

+2

元の質問を消去しないでください。人々は同じ問題を抱えているかもしれません。 – Thomas

答えて

1

任意の違いを確認、このようにそれを呼び出すん?:

DWORD_PTR mask = 1; 
SetThreadAffinityMask(GetCurrentThread(), mask); 

は、あなたのスレッドハンドルを必要access rightsを持っている:?

Windows Server 2003およびWindows XP/2000 :ハンドルには THREAD_SET_INFORMATIONと THREAD_QUERY_INFORMATIONアクセス権が必要です。

+0

私には権利がないとエラーが返ってくると思います。それ以外に、SetProcessAffinityMask()は完全に動作します... –

1

私はそれらを使用してから数ヶ月が経ちましたが、私はその機能に問題はありませんでした。ここで

はあなたがチェックしたい場合がありますいくつかのものです:

  • あなたはプロセッサ2に一つのスレッドがある場合は、その後、プログラムの残りの部分は、プロセッサ1を使用することができSetProcessAffinityMaskとSetThreadAffinityMask
  • の競合はありません。
  • ディスプレイGetCurrentProcessorNumberは、正しいCPUで動作しているかどうかをテストします。
+0

GetCurrentProcessorNumber()はWindows XPでは使用できません... –

+0

その後、Vistaで試してみることをお勧めします。 – Unknown

1

あなたのしていることは正しいようですが、代わりに SetThreadIdealProcessorを試してみることができますか?

+0

SetThreadIdealProcessor()はまったく同じ結果を返します。 –

関連する問題