• ベストアンサー

ハードウェアスレッドの割り当て方法

ハードウェアスレッドがある環境で、win32APIを用いて、スレッドを特定のプロセッサに割り当てる方法を探してます。 イメージとしては.Netで言うところのThread.SetProcessorAffinityのようなものです。 ご存知の方、ご教授お願いします。 環境はXP,VC8です。

  • qOat
  • お礼率80% (42/52)

質問者が選んだベストアンサー

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

SetThreadAffinityMaskというAPIがあります。

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_setthreadaffinitymask.asp
qOat
質問者

お礼

返答ありがとうございます。 まさに探してたAPIでした。

関連するQ&A

  • マルチスレッド間でデータ交換をする方法

    マルチスレッドの知識がないままに、プログラミングをする必要が出てしまったのですが、書籍などで調べても分からない部分があるため、質問いたします。 Win32APIを用いて(MFCは使用しない)、WindowsでVC7.0環境です。 やりたいことは、 スレッドAとスレッドBを生成し、 スレッドAの終了時点で、スレッドBがスレッドA内部で生成したクラスのインスタンスを取得するというものです。(もしくはその逆) スレッドAとB自体もクラスで構成しており、内部で生成されるインスタンスはグローバルではないため、スレッドBからスレッドAを見えるような仕組みが必要なのでしょうか?? まだイメージだけの段階で、ソースコードで表現できなくて申し訳ないのですが、簡単にご教授くださる方、もしくは参考になるサイトを教えてくださる方がいらっしゃいましたら、お願いいたします!

  • スレッドの作成と起動

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <質問> ボタンを押すとOnButton()に入ります。 OnButton()内でワーカースレッドを起動させたいのですが、 どのようにコーディングするのでしょうか? スレッドの作成方法も分かりません・・。 宜しければご指摘お願い致します。

  • クラスでスレッド作成

    VC++2008Express WIN32APIでRS232Cの通信用クラスを作成しています。 RS232Cの受信用スレッドを作成して 1ポートの受信処理をするようにはできます。 ですが ポート追加するたびにクラスをインスタンス化して受信用スレッドを 作成したいのですが、スレッド作成するには使用する変数などを staticにしないといけないため、クラスを複数インスタンス化できません。 どのような手法でクラスから複数スレッドを作成することができるのでしょうか? 分かりにくい説明ですが、参考になるものなどありましたら、 よろしくお願いします。

  • スレッドの優先度を下げる方法。

    現在バックグラウンドでファイルアクセスを行うプログラムを組んでおります。 しかしこの読み込みのスレッドのCPU占有率が高いためか、バックグラウンドで 読み込んでいるのに関らず、その他の処理が重くなってしまいます。 この問題を解決しようとファイルアクセスの合間にSleepを挟みましたが 一度にファイルアクセスしている時間が長いためかあまり効果が目に見えません。 できたら平均的に負荷がかかるようにしたいのです。 何か解決方法はないでしょうか? 今考えていることは次の二つ(三つ)です。 1.ファイルアクセスを分割して負荷を下げる。 2.何らかの方法でスレッドの優先順位を下げる。 (3.ファイルアクセス自体の負荷を下げる???) 1が一番現実的かと思っています。 2の方法はプロセスの優先度を下げるソフトを目にしたことがあったので 思いついたのですが、そのような関数が今のところ見当たりません。 3は、そういうものがあるのだろうか?というレベルです。 もしあったら積極的に使いたいと思います。 できたら2の方法で解決したいと思っております。 これに関して何かご存知の方がいらっしゃいましたら、ご教授よろしくお願いします。 VC9+XP sp3にてプログラミングを行っております。

  • ハードウェア機器のドライブ番号の変更をする方法

    プログラムでハードウェア機器のドライブ番号の変更をする方法をご存知の方教えて下さい。 おそらくWINDOWS APIを使用しないと出来ないと思い、調べてみましたが見つかりません。マニュアルで変更する方法をプログラムで自動変更 したいのです。言語は問いません。 使用OS:WINDOWS XP

  • 特定のスレッドの破棄

    Win32 APIを使っています。 ソートの勉強の為に 右クリックでシャッフル、左クリックでソートするプログラムを作りました。 ソートをスレッドで行なっています。 ソート中に右クリックを押すとシャッフルと同時にスレッドを破棄したいと思ったのですが CreateThreadで作った特定のスレッドを破棄するにはどうしたらよいでしょうか? GetExitCodeThreadとExitThreadを使って破棄すると思い 試してみたらプログラム自体が閉じてしまいました。 タスクマネージャで確認したらプログラム自体はあってウィンドウは表示されてない状態になりました。

  • マルチコア上のLinux環境にて、スレッドを任意のコアに割り当てることは可能か?

    こんにちは。cstepと申します。 Intel Core 2 Quad(コア数x4)のマシン上の ReaHat Linux 9(Kernel 2.4.20-8)環境で、pthread(glibc-2.3.2-11.9, NPTL 0.29, gcc 3.2.2)を使用したマルチスレッド・プログラミングをしています。 各スレッドのコア割り当てを(OSの自動スケジューリングではなくて)手動で固定的に割り当てることは可能でしょうか? 可能な場合それを実現するAPIや実現方法をご教授いただけますでしょうか。 例えば、8つのスレッドからなるプログラムだとした場合、 ・スレッド1と5 → コア1に割り当て ・スレッド2と6 → コア2に割り当て ・スレッド3と7 → コア3に割り当て ・スレッド4と8 → コア4に割り当て というふうに、各スレッド(1~8)を任意のコア(1~4)に固定的に割り当てて動作させたいと考えております。 Windowsの場合は、SetThreadAffinityMask() または SetThreadIdealProcessor() といったAPIを使うことで上記の要求は可能かと思いますが、Linuxでの方法が分からず、質問させていただきました。 よろしくお願い致します。

  • VC++2005のスレッド使用方法について

    現在、VC++2005 SP2にてDLLを作成しています。 DLLには一つスレッドがあり、開始関数が実行されれば、スレッドが起動。終了関数を実行すればスレッドを停止させたいと思っております。 関数を分けていますので、以下の内容をグローバルで宣言したいと考えています。 Thread^ oThread = gcnew Thread( gcnew ThreadStart( &CUart::ThreadProc ) );                                     ~~~~~~~~~~~~~~~~~~~~~~~~                                         実行関数です。 oThread->Start();  //開始関数のスレッド開始  oThread->Abort();  //終了関数のスレッド停止 現在、宣言をグローバルのところに配置して、ビルドすると エラー 1 error C3145: 'oThread' : グローバルまたは静的変数は、マネージ型 'System::Threading::Thread ^' を含むことはできません とエラーが発生してしまいます。 いろいろ調べましたが、なかなか進んでいない状態です。 使用方法が間違っているのでしょうか?申し訳ありませんが、教えてください。 もし、別の方法があればご教授願います。 よろしくお願いします。

  • ハードウェアロックが不正と表示される。

    ハードウェアロックが不正と表示される。 のし紙に印刷するソフト「筆の達人」を使用しているのですが、プリンターを変えたら、「筆の達人」が起動しなくなりました。 ハードウェアロックが不正・・・というような表示がでてしまいました。 正直にいって、全く不正なことはしていません。 USBにハードウェアロック(ドングルとも言うのでしょうか?)が、差し込んでいて、これがエラーの原因かなあと、思っています。 ハードウェアロックというのは、ある特定のソフトのためだけにあるのですか? ハードウェアロックのことを詳しく知らないのですが、ここに何かインストールをしないといけないのですか? ハードウェアロックを、再度読み込めるようにして、「筆の達人」を起動したいのです。 仕事が出来なくて、困っています。 WIN XPです。 ご存知の方、よろしくお願いいたします。

  • スレッド制御に関して

    C言語の初心者です。 現在、スレッドの勉強をしております。 最近、pthreadをなんとなく理解しつつありますが、 下記の2点に関して試行錯誤しております。 (1)スレッドを周期的に起動したい (2)時間によって起動したい (1)は、例えば30秒毎にスレッドを起動させたい等といった、周期スレッドの生成方法です。今考えているのは、スレッドを生成後、スレッド生成元で30秒間sleepして、2回目のスレッドを起動…。といったイメージを考えております。 (2)に関しても同様で、例えば12時00分00秒にスレッドを生成したいというパターンで、スレッド生成元にて、時間を取得して、その時間が12時00分00秒であればスレッド生成を行うといったイメージを考えております。 上記2案とも初心者なりに考えた案なのですが、他によい案はありませんでしょうか? ご教授頂けますようよろしくお願いいたします。