23486


windowsなどでプログラムが応答しないという記述が表示されることがありますが、  
このような応答の応答がないプログラムを検出するプログラムはどのようになっているのですか？  
毎回毎回プログラム以前の無知な質問ですみません

【追記】  
「イベントが一定時間以上の間処理されない」  
C++/cliかC#の入門で一番最初にウインドウだけを作るプログラム（いわゆるhello
worldプログラム）を作った経験があるのですが、あれにもイベントがあるのですか。  
イベントはクリックしたりキーボード入力などの時に呼び出されることは知っていますが、あれ単体では何かしらのイベントがあるのか疑問です。  
その回答がPeekMessageだとわかりました。  
PeekMessageとはなんですか？プロセス間通信か何かの用語ですか？（非常に完結でかまいません残りは自力でどうにかします。というより調べたら関数だということがわかりました。）


CC BY-SA 3.0
2016-03-26T11:09:04.613
23485
2016-03-27T09:09:05.297
2016-03-26T12:07:46.330
10455
10455
question
アルゴリズム
無限ループはどのようにして検出しているのですか？


一般的にアプリが何らかの無限ループにはまっていることを検出することはできず、単に「プログラムが応答しない」ことを検出しているにすぎません。  
WindowsなどのGUI系アプリの場合、イベントキューを用いたイベントドリブンな書き方をするのが一般的ですから、「イベントが一定時間以上の間処理されない」ことで「応答がない」と判定できます。

Windowsの場合[superuser](http://superuser.com)(本家stackoverflowのファミリーサイト)に[似た質問のスレッド](https://superuser.com/questions/961843/how-
does-windows-know-if-a-program-is-not-responding)がありました。  
その中に紹介されているWindowsの[IsHungAppWindow function](https://msdn.microsoft.com/ja-
jp/library/windows/desktop/ms633526\(v=vs.85\).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」と呼んでいるので、そのような名前になっています。要はイベントキューに新しいイベントが入っていないかどうか覗いてみるための関数ですね。先に書いたように、システム側で処理しているので、普通のアプリの中には現れません。


CC BY-SA 3.0
2016-03-26T11:48:46.687
23486
2016-03-27T09:09:05.297
2017-03-20T10:18:03.377
-1
13972
23485
answer