在this SO问题的答案中,评论中提出了一些建议,但从未完全确定过。所以这个问题的基础是得到一个完整,正确,高质量的答案。
所以这里是我根据上述SO问题的答案和评论得出的代码:
FROM rails:4.2
MAINTAINER Chen Kinnrot <kinnrot@gmail.com>
RUN mkdir -p /var/app
COPY Gemfile /var/app/Gemfile
WORKDIR /var/app
RUN bundle install
CMD rails s -b 0.0.0.0
但是在上述方式的答案中有一个注释:MsgWaitForMultipleObjects被调用:&#34; 只有当MsgWaitForMultipleObjects()专门返回WAIT_OBJECT_0 + 1时才应该处理消息。相应地处理其他返回值。&#34; - Remy Lebeau
请建议将更正作为答案,以使其完整,质量更好的代码。
答案 0 :(得分:4)
MsgWaitForMultipleObjects
的文档告诉您如何解释返回值。以下是特定呼叫的可能返回值:
WAIT_OBJECT_0 + 0
表示等待返回,因为该进程已发出信号。通过退出循环来处理这个问题。您的子进程已终止。 WAIT_OBJECT_0 + 1
表示因为消息已添加到队列而返回等待。通过抽取消息队列然后继续循环来处理此问题。 WAIT_ABANDONED_0 + 0
。 WAIT_TIMEOUT
是不可能的,因为您使用了无限超时。 WAIT_FAILED
是意外错误。这不可能遇到。您应该致电RaiseLastOSError
来回复此问题。 在评论中讨论的代码中还有其他错误,我不再重复。
此外,您的方法可能导致重新入侵的问题,相当于调用Application.ProcessMessages
。最好等待一个线程并在等待返回时发送消息。