ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

CMultiLockの問題

Semaphoreの参照カウント数を知るために、カウント数を保持するクラスを作ってみたのだがうまくカウントしてくれない。原因を調べるために、CMultiLockのコードを読んでみたらびっくりした。Unlock()とかはCSyncObjectクラスのUnlock()を呼び出すようになっているのに。Lock()は直接Win32APIを叩きに行っていて、CSyncObjectのLock()を呼んでいない。そのため、CSemaphoreのLock()をオーバーライドしても意味がない!!!

ちなみにCSingleLockならLock()はちゃんとCSyncObjectのLock()を呼び出しているので安心。

それにしても、どうしてくれよう、この実装・・・。CMultiLockを継承したクラスを作るしかないのか?面倒だなあ。