如何让Free Pascal控制台应用程序一直运行?

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

你更倾向于哪种方式?或者有更好的方法来保持应用程序运行吗?

不确定这是否有帮助 http://wiki.freepascal.org/Daemons_and_Services ... 否则两个循环可能会做同样的事情。 - cristi _b
3个回答

3

这是一个非常好的问题,我不知道为什么有人投反对票。我赞成。

问题不仅仅是无限等待(例如,while checkforsomeevent do sleep(10);将会等待你想要终止的任何事件,或者如果你不想终止则是TRUE。由于线程没有任务可做,sleep(0)会浪费资源),更大的问题是Windows会在一段时间后终止长时间运行的控制台程序,因为它认为它们“挂起”了。

我不能确定这是关于执行时间还是CPU资源的问题。

Free Pascal帮助编译器chmcmd可能需要很长时间(几分钟,因为它正在压缩html)。它支持*nix上的线程,但我从未能使其在Windows下正常工作。(诚实地说,由于chmcmd主要用于*nix,它并不是一个高优先级的项目)

当时我做了些研究,似乎你必须注册窗口句柄并处理消息才能避免这种情况。我尝试了这个方法但失败了,并且现在找不到补丁,它可能在我的工作系统上。


1
在Linux上,您可以调用pause()来阻塞程序直到接收到信号。因此,您需要在循环中调用pause()。与休眠相比,这种方法的优点是您的进程可以被终止信号终止。

0

你如何创建HTTP服务器?如果使用TFPHTTPServer,它应该一直保持打开状态,直到显式销毁或崩溃。


这是Indy HTTP服务器 - Start立即返回。 - mjn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接