如何保持Free Pascal控制台应用程序“永远”运行?

时间:2012-12-30 12:27:21

标签: linux freepascal

在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);

您更喜欢哪一个?或者有更好的方法来保持应用程序运行吗?

3 个答案:

答案 0 :(得分:3)

这是一个非常好的问题,我不知道为什么人们会投票。一个来自我。

这不仅仅是永远等待的问题(当checkforsomeevent do sleep(10); checkforsomeevent将检查你要终止的任何事件,或者如果不这样做则为TRUE。由于线程没有任何内容做,睡觉(0)似乎是浪费资源)

更大的问题是Windows将终止长时间运行的控制台程序,这些程序会在一段时间后初始化线程支持,因为它认为它们“挂起”。

我不完全确定这是(墙上)运行时间,或CPU资源。

Free Pascal帮助编译器chmcmd可以运行很长时间(分钟,因为它正在压缩html)。它支持* nix上的线程,但我从来没有让它在Windows下正常工作。 (诚​​然,由于chmcmd主要用于* nix,因此它不是高优先级项目)

我回过头来研究了一下,看来你必须注册一个窗口句并处理消息以避免这种情况。我试过这个但是失败了,找不到补丁atm,它可能在我的工作系统上。

答案 1 :(得分:1)

在Linux上,您可以调用pause(),它会阻止直到收到信号。因此,您需要致电pause()是一个循环。这种过度休眠的优点是可以通过终止信号终止处理。

答案 2 :(得分:0)

如何创建HTTP服务器?如果你正在使用TFPHTTPServer,它应该永远关闭,直到明确销毁或崩溃。