访问特定宽度整型数据时常会遇到类似PRId32、PRId64。比较常见的如流媒体处理中的时间戳。
以下的这些宏可扩展为基于特定宽度的整型类型包含相应printf或者scanf格式化的字符串
头文件:<inttypes.h>
下面以一个使用中的例子来真切的认识PRId64这种宏的使用
例子1
#include <stdio.h> #include <stdint.h> #include <inttypes.h> /* strtoimax, PRIdMAX, SCNdMAX */ int main () { char buffer[80]; intmax_t foo,bar; printf ("Please, enter a number: "); fgets (buffer,80,stdin); foo = strtoimax (buffer,NULL,10); printf ("Thanks for entering %" PRIdMAX ".\n", foo); printf ("Please, enter another number: "); scanf ("%" SCNdMAX,&bar); printf ("%" PRIdMAX " by %" PRIdMAX " is %" PRIdMAX, foo, bar, foo*bar); return 0; }
结果输出:
例子2: 打印时间戳
//代码摘自Android开源
扫描二维码关注公众号,回复:
9796855 查看本文章
std::unique_ptr<AutoConditionLock> AutoConditionLock::waitAndAcquire( const std::shared_ptr<WaitableMutexWrapper>& manager, nsecs_t waitTime) { if (manager == nullptr || manager->mMutex == nullptr) { return std::unique_ptr<AutoConditionLock>{nullptr};
}
std::unique_ptr<AutoConditionLock> scopedLock(new AutoConditionLock(manager));
nsecs_t failTime = systemTime(SYSTEM_TIME_MONOTONIC) + waitTime;
while (manager->mState) {
status_t ret = manager->mCondition.waitRelative(*(manager->mMutex), waitTime);
if (ret != NO_ERROR) {
return std::unique_ptr<AutoConditionLock>{nullptr};
}
waitTime = failTime - systemTime(SYSTEM_TIME_MONOTONIC);
}
//这里是自己加的调试输出,获取lock的等待时间
ALOGE("%s[%d] acquire mServiceLock wait:%" PRId64 "ns", __func__, __LINE__, waitTime);
manager->mState = true;
scopedLock->mAcquired = true;
return scopedLock;
}