0

我只想将线程与 WINAPI 调用同步,但没有成功。情况是在我的 WNDPROC 收到消息后立即记录带有时间和日期的活动。问题是我的 WNDPROC 需要写入日志,因为写入文件需要时间,所以它会失控。我试图在 WNDPROC 启动后立即进入临界区,并在写入日志完成后立即离开临界区,但没有运气。怎么能让他们互相等待?

4

1 回答 1

1

不要等待 - 排队。

Windows 消息是如此之小,(在其自身内部:),将整个消息复制到生产者-消费者队列中是一种合理的方法。您可以提出自己的队列类,或者您可以使用 PostThreadMessage() API 将接收到的消息复制并排队到记录器线程:

http://msdn.microsoft.com/en-gb/library/windows/desktop/ms644946%28v=vs.85%29.aspx

PTM() 的问题是只有消息数据被复制和排队 - 没有时间/日期。当获取消息副本时,必须在记录器线程中添加时间/日期。检查您的要求,看看这是否可以接受。如果没有,您将不得不使用具有 Windows 消息和日期/时间成员的不同“消息”结构。

排队使 UI 线程与可能很长的磁盘日志写入操作隔离开来,并允许额外的灵活性来结合惰性写入和其他此类优化(如果需要)。

于 2013-02-20T09:05:02.297 回答