6

Linux Free Pascal 2.6.0 コンソール アプリケーションでは、HTTP サーバーが開始され、別のスレッドで実行されるため、Start の呼び出しはすぐに返されます。

begin
  ...
  MyHTTPServer.Start;
  ...
  WriteLn('Application terminated');
end;

コンソールが閉じないようにするには、次のような単純な無限ループを使用できます。

// wait, read and ignore input from stdin
while True do ReadLn;

また

// Sleep as long as possible
while True do Sleep(MaxInt);

どちらがいいですか?または、アプリケーションを実行し続けるためのより良い方法はありますか?

4

3 に答える 3

3

これは非常に良い質問であり、なぜ人々が反対票を投じたのかわかりません。私から一つ上。

永遠に待つだけの問題ではありません ( while checkforsomeevent do sleep(10); は、 checkforsomeevent が終了したいイベントをチェックする場所でそれを行います。そうでない場合は TRUE を行います。スレッドには何もすることがないため、スリープします。 (0) リソースの浪費のようです)

より大きな問題は、Windows が「ハング」したと判断して、スレッド サポートを初期化する長時間実行されているコンソール プログラムを終了することです。

これが(壁の)実行時間、またはCPUリソースにあるのかどうかは完全にはわかりません。

Free Pascal ヘルプ コンパイラ chmcmd は長時間 (html を圧縮しているため、数分) 実行できます。*nix でのスレッド化をサポートしていますが、Windows で正しく動作することはありませんでした。(そして確かに、chmcmd は主に *nix で使用されるため、優先度の高い項目ではありませんでした)

当時、私は少し調査しましたが、これを回避するには、ウィンドウハンドルを登録してメッセージを処理する必要があるようです。これを試してみましたが失敗しました。パッチ atm が見つかりません。おそらく私の作業システムにあります。

于 2012-12-30T20:30:32.383 に答える
1

pause()Linux では、シグナルが受信されるまでどのブロックを呼び出すことができます。したがって、呼び出す必要pause()があるのはループです。スリープに対するこの利点は、終了シグナルによってプロセスを終了できることです。

于 2012-12-30T13:01:34.173 に答える
0

HTTP サーバーはどのように作成しますか? TFPHTTPServer を使用している場合は、明示的に破棄またはクラッシュするまで決して閉じないでください。

于 2012-12-30T13:07:13.177 に答える