質問: windowsなどでプログラムが応答しないという記述が表示されることがありますが、 このような応答の応答がないプログラムを検出するプログラムはどのようになっているのですか? 毎回毎回プログラム以前の無知な質問ですみません 【追記】 「イベントが一定時間以上の間処理されない」 C++/cliかC#の入門で一番最初にウインドウだけを作るプログラム(いわゆるhello worldプログラム)を作った経験があるのですが、あれにもイベントがあるのですか。 イベントはクリックしたりキーボード入力などの時に呼び出されることは知っていますが、あれ単体では何かしらのイベントがあるのか疑問です。 その回答がPeekMessageだとわかりました。 PeekMessageとはなんですか?プロセス間通信か何かの用語ですか?(非常に完結でかまいません残りは自力でどうにかします。というより調べたら関数だということがわかりました。)
回答: 一般的にアプリが何らかの無限ループにはまっていることを検出することはできず、単に「プログラムが応答しない」ことを検出しているにすぎません。 WindowsなどのGUI系アプリの場合、イベントキューを用いたイベントドリブンな書き方をするのが一般的ですから、「イベントが一定時間以上の間処理されない」ことで「応答がない」と判定できます。 Windowsの場合superuser(本家stackoverflowのファミリーサイト)に似た質問のスレッドがありました。 その中に紹介されているWindowsのIsHungAppWindow function.aspx)には次のような記載があります。 > > An application is considered to be not responding if it is not waiting > > for input, is not in startup processing, and has not called > > PeekMessage within the internal timeout period of 5 seconds. > > > 「入力待ちでも起動時処理をしているのでもない場合に5秒間PeekMessageを呼んでいなければ、応答がないと考えられる。」 【追記】 > > C++/cliかC#の入門で一番最初にウインドウだけを作るプログラム(いわゆるhello worldプログラム)を作った経験があるのですが、あれにもイベントがあるのですか。 > > > はい。イベントキューを監視する部分は、システム側で記述されており、常にイベントキューに新しいイベントが入ってきていないかをチェックしています。(あなたが書いたコードにイベント処理の部分があるかないかは関係ありません。) > > PeekMessageとはなんですか? > > > Windows APIの用語です。Windows APIではイベントキューに入るイベントを一般化して「Message」と呼んでいるので、そのような名前になっています。要はイベントキューに新しいイベントが入っていないかどうか覗いてみるための関数ですね。先に書いたように、システム側で処理しているので、普通のアプリの中には現れません。