人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Windows2000,XPでUNIXの
SIGSTOP & SIGCONT に相当するものを教えて下さい。

●質問者: toton
●カテゴリ:コンピュータ
✍キーワード:UNIX Windows2000 XP
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● monyo
●49ポイント

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

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

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

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

◎質問者からの返答

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

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


2 ● ma-kanoh
●19ポイント

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,

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

◎質問者からの返答

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

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

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


3 ● takoratta
●22ポイント

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

単純にイベントを通知できれば良いと解釈いたしましたので、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へのポーティング資料なんですが…。

◎質問者からの返答

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

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


4 ● takoratta
●100ポイント ベストアンサー

それでは、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させるものでしたので、こちらのほうがより良いかと思います。

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ