2013-08-09 1 views
-2

C++에서 Windows 용 간단하고 안전한 스레드 콘솔 래퍼를 만들려고합니다. API를 살펴보면 콘솔에 대한 액세스 잠금/잠금 해제 기능이 표시되지 않습니다. 메모리의 경우, HeapLockHeapUnlock이 있습니다.Windows API 콘솔 잠금

콘솔과 같은 기능이 있습니까? 아니면 자체 뮤텍스를 만들어야합니까?

편집 : 아래의 의견에 나타낸 바와 같이

, 콘솔 랩퍼는 콘솔에 대한 액세스를 제어하는 ​​것입니다. 스레드가 콘솔에서 복합 작업을 수행 할 때 (예 : 콘솔 색상 변경, 여러 메시지 쓰기 및 색상 복원), 다른 스레드는 콘솔을 수정하거나 쓰기를 할 수 없도록 잠금이 필요합니다 .

+2

콘솔에 대한 액세스를 잠그면 무슨 뜻인지 설명 할 수 있습니까? – Sean

+2

* console wrapper *가 의미하는 바를 명확히 할 수 있습니까? –

+0

@Sean 액세스를 잠그고 여러 콘솔 조작을 수행하여 다른 스레드가 그 사이에 콘솔을 수정/쓰지 않도록하십시오. – Zeenobit

답변

2

로깅을 담당하는 기능에 대한 액세스를 잠 가야합니다. 다음 코드와 같이 :

std::mutex mforlog; 
void Log(std::string s) { 
    std::unique_lock<mutex> lock{mforlog}; 
    std::cout << s << std::endl; 
} 

로깅이 다른 프로세스에서 수행 된 경우 명명 된 뮤텍스 (winapi 함수 : CreateMutex)를 사용하십시오.

로깅을 잠그면 다른 문제가 발생할 수 있습니다. 일부 스레드는 느리게 작동하므로 (뮤텍스를 기다리는 중입니다) 버그를 찾기가 어려울 수 있습니다.