- 在 trace Android media player時, 常看到 function有些有加 _l suffix的, 有的沒有. e.g. prepare, prepare_l
- 主要的差異在於是否有用 Mutex lock住
- 但此時又看到神奇的 code
- /frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
-
status_t NuPlayerDriver::prepare() { ALOGV("prepare(%p)", this); Mutex::Autolock autoLock(mLock); return prepare_l(); } - /frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp 因此會發出疑問, 這個 autoLock 是做什麼的? 定義卻沒有使用?
- 簡單說, 就是利用 constructor跟 deconstructor 來呼叫 mutex lock 跟 mutex unlock
- 而此處的 prepare_l 有 l結尾的應該就是指 lock後執行的程式碼
2017年12月28日 星期四
[Android] Autolock
2017年12月27日 星期三
[C++] Coding convention - prefix k and What
- trace Android code時, 常會看到如下的 code
enum { kWhatSetDataSource = '=DaS', kWhatPrepare = 'prep', kWhatSetVideoSurface = '=VSu', kWhatSetAudioSink = '=AuS', kWhatMoreDataQueued = 'more', kWhatConfigPlayback = 'cfPB', ...- 這個 k代表什麼意思呢? => konstant, 因為 c的 prefix 已經被 char 用掉了, 用了 Germany的 konstant, 至於全大寫與 Hungarian notation 就不在這戰了
- 至於 What, 則猜測這些 enum 主要是用來在 message中傳遞, 對應 message.what 的 int值, 所以在 handler中常會看到自行定義的 enum 用 kWhat當 prefix
- 節錄 Android doc Message.what
-
what int what User-defined message code so that the recipient can identify what this message is about.
Each Handler has its own name-space for message codes,
so you do not need to worry about yours conflicting with other handlers.
訂閱:
文章 (Atom)