使用WINAPI同步线程

时间:2013-02-20 05:19:55

标签: multithreading winapi thread-synchronization

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

1 个答案:

答案 0 :(得分:1)

不要等 - 排队。

Windows消息非常小(本身:),将整个消息复制到生产者 - 消费者队列是一种合理的方法。您可以引发自己的队列类,也可以使用PostThreadMessage()API将收到的消息复制并排队到记录器线程:

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

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

排队将UI线程与可能冗长的磁盘日志写入操作隔离开来,并允许额外的灵活性,以便在需要时合并延迟写入和其他此类优化。