Windows2000,XPでUNIXの

SIGSTOP & SIGCONT に相当するものを教えて下さい。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/04/29 16:16:27
  • 終了:2006/05/03 22:58:19

ベストアンサー

id:takoratta No.4

takoratta回答回数72ベストアンサー獲得回数52006/05/03 05:59:27

ポイント100pt

それでは、SuspendThread()/ResumeThread()を使うことになるかと思います。

SuspendThread()はhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_...に、ResumeThread()はhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_...に解説されています。

サンプルは、http://www.codeproject.com/threads/pausep.asp?df=100&forumid=104...にあるのが良いかと思います。サンプルソースコードのダウンロードにはメンバー登録が必要です(無料です)。

日本語でこれらのAPIを使ったサンプルを紹介しているサイトもありましたが、それらは同一プロセス内のスレッドをSuspend/Resumeさせるものでしたので、こちらのほうがより良いかと思います。

id:toton

有難うございます!先の回答のPsSuspendのソース付きみたいなものですね!

2006/05/03 22:55:27

その他の回答(3件)

id:monyot No.1

monyo回答回数146ベストアンサー獲得回数182006/04/30 17:32:56

ポイント49pt

http://msdn.microsoft.com/library/default.asp?url=/library/e...

http://msdn.microsoft.com/library/default.asp?url=/library/e...

上記に書いてあるとおり、SIGSTOP や SIGCONT は直接的にはサポートされていないですね。

上記に大体策とある WaitForSingleObject を使いこなすには、かなり Windows 的なプログラミングが必要になります。

id:toton

リンクの「UNIX Application Migration Guide」、時間のあるときに確認しようかと思いますが、読み応えがありそうですね。

「Table 4. UNIX signals and replacement mechanisms」を見ると正にWaitForSingleObject が正解に近そうな感じではありそうですが、自アプリが待つのではなく他アプリにSIGSTOPを送るようなことができるのでしょうか。名前からしてUNIXのselect()のように自プロセスが待機状態になる関数かと思いましたが、自分はwindowsプログラミングに詳しくないためよくわかりません。この点について解説して頂ける方の回答もお待ちします。

2006/04/30 23:10:20
id:ma-kanoh No.2

ma-kanoh回答回数155ベストアンサー獲得回数42006/04/30 20:54:06

ポイント19pt

http://www.mitene.or.jp/~sugisita/vb6_etc.html

プロセスの一時停止はよくわかりませんが、一応スリープ機能のサンプルとか。

http://store.nikkeibp.co.jp/item/contents/m_4822280802.html

あとはスレッドの一時停止を自分で実装するとか。

http://www.sysinternals.com/Utilities/PsSuspend.html

あとはこれになるかな。

PsSuspend lets you suspend processes on the local or a remote system,

だそうで。中身が分からないけど。。

id:toton

自プロセスの制御をしたいわけではなく、タスクマネージャで他のプロセスをkillするように、一時停止と再開がしたいのです。

PsSuspend は他プロセスのサスペンドが出来ているように見えます。確認はしてませんがこれでメッセージの横取りなどのトリックではなくサスペンドしたCPU資源を消費してなければ、実現方法は不明だができるはず、ということになるでしょうか。

ソースが付いていれば・・・

2006/04/30 23:15:44
id:takoratta No.3

takoratta回答回数72ベストアンサー獲得回数52006/05/02 09:22:37

ポイント22pt

シグナルの送信側および受信側のアプリケーションともソースを改変できるという前提のもとで回答します。

単純にイベントを通知できれば良いと解釈いたしましたので、Windowsのオブジェクトの中でもイベントの利用で十分ではないかと思います。CreateEvent()でイベントを作成し、WaitForSingleObject()で待つのが受信側、CreateEvent()でイベントを作成し、SetEvent()でイベントをシグナル状態にするのが送信側となります(一番単純な手順ですが)。

CreateEvent()についてはhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_...を、SetEvent()についてはhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_...を、WaitForSingleObject()についてはhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_...をご覧下さい。

サンプルですが、http://www-128.ibm.com/developerworks/library/l-ipc2lin2.htmlのListing 7が参考になるかと思います。本当はこの資料はPort Windows IPC apps to Linux, Part 2: Semaphores and eventsで、WindowsからLinuxへのポーティング資料なんですが…。

id:toton

先に書いておくべきでしたが、受信側は普通のwindowsプログラムという前提でお願いします。

これで具体的に何か作りたい、というわけではないのですが、windowsにはSIGSTOPがない?としても呼び方が違うだけで同じようなプロセス通信の仕組みがあるのではないか、それが知りたい、と考えています。

2006/05/02 22:38:38
id:takoratta No.4

takoratta回答回数72ベストアンサー獲得回数52006/05/03 05:59:27ここでベストアンサー

ポイント100pt

それでは、SuspendThread()/ResumeThread()を使うことになるかと思います。

SuspendThread()はhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_...に、ResumeThread()はhttp://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_...に解説されています。

サンプルは、http://www.codeproject.com/threads/pausep.asp?df=100&forumid=104...にあるのが良いかと思います。サンプルソースコードのダウンロードにはメンバー登録が必要です(無料です)。

日本語でこれらのAPIを使ったサンプルを紹介しているサイトもありましたが、それらは同一プロセス内のスレッドをSuspend/Resumeさせるものでしたので、こちらのほうがより良いかと思います。

id:toton

有難うございます!先の回答のPsSuspendのソース付きみたいなものですね!

2006/05/03 22:55:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません