在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);
您更喜欢哪一个?或者有更好的方法来保持应用程序运行吗?
答案 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,它应该永远关闭,直到明确销毁或崩溃。