2013-02-20 2 views
0

스레드를 WINAPI 호출과 동기화하고 싶습니다만 성공하지 못했습니다. 상황은 내 WNDPROC가 메시지를받는대로 시간과 날짜가 포함 된 활동을 기록하는 것입니다. 문제는 내 WNDPROC가 로그에 쓸 필요가 있으며 파일 쓰기가 시간이 걸리기 때문에 손에서 벗어날 것입니다. 나는 WNDPROC가 시작하자마자 중요한 섹션에 들어가려고했으나 로그 작성이 끝나자 마자 중대한 섹션을 남겨 뒀지 만 운은 없었습니다. 어떻게 그들을 서로 기다릴 수 있습니까?스레드를 WINAPI와 동기화

+1

코드 예없이 Q가 분명하지 않습니다. ATM 나는 당신이 부적절하게 SC를 사용하고 있다고 믿습니다. 메인이 아닌 각 스레드에 CS를 입력해야합니다. – Maximus

+1

@Maximus가 암시 하듯이, 로깅이 모두 창 proc에 있다면, 어쨌든 모두 같은 스레드에 있습니다. – HerrJoebob

답변

1

기다리지 마십시오.

Windows 메시지는 전체 메시지를 생산자 - 소비자 대기열로 복사하는 것은 너무 적습니다 (자체 :). 합리적인 방법입니다. 당신은 당신의 자신의 큐 클래스를 올릴 수도 있고, 당신은 아마 로거 스레드에 수신 된 메시지를 복사하고 대기하는 PostThreadMessage() API를 사용할 수 있습니다

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

PTM (함께하다가는) 메시지 만이다 데이터는 복사되고 대기열에 넣어지며 시간/날짜는 없습니다. Thge 시간/날짜는 메시지 사본을 얻을 때 로거 스레드에 추가되어야합니다. 이것이 허용되는지 확인하려면 요구 사항을 확인하십시오. 그렇지 않으면 Windows 메시지와 날짜/시간 모두에 대한 멤버가있는 다른 '메시지'구조체를 사용해야합니다.

대기열은 UI 쓰레드를 디스크 로깅 쓰기 작업으로부터 격리 시키며 필요할 경우 지연 쓰기 및 기타 최적화를 통합 할 수있는 유연성을 제공합니다.

+0

이것은 정상적으로 작동합니다. 대단히 감사합니다! –