2013-02-20 96 views
0

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

+1

没有代码示例,你的Q不清楚。自动取款机我相信你不正确地使用SC - 你需要在每个线程中输入CS,而不是主要。 – Maximus 2013-02-20 06:16:57

+1

正如@Maximus所暗示的,如果你的日志记录全部在你的窗口中,那么它就全部在同一个线程中。 – HerrJoebob 2013-02-20 07:45:55

回答

1

不要等待 - 排队。

Windows消息太小了(本身:),将整个消息复制到生产者 - 消费者队列是一种合理的方法。你可以提出你自己的队列类,或者你也许可以使用PostThreadMessage()API接收到的信息复制和排队到记录器线程:

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

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

队列将UI线程从可能冗长的磁盘日志记录写入操作中隔离出来,并且允许额外的灵活性来合并懒惰写入和其他此类优化(如果需要)。

+0

这将工作得很好,非常感谢你! – 2013-02-20 18:32:42