【发布时间】:2015-09-04 15:32:28
【问题描述】:
我在 QNX IDE 中用 C++ 编写的应用程序中跨多个线程使用了一些函数。有时在分析日志时,很难找到调用它的线程。虽然我可以在日志中使用gettid 或pthread_getname_np,但仍在寻找像 __LINE__ 这样的标准宏。
即使 QNX 不支持它,我也想知道其他操作系统/编译器/标准是否有它。
【问题讨论】:
-
该 id 是特定于运行时的,因此不会有类似于 __LINE__ 的标准宏,它在编译时是已知的。
-
引用“standard”:
gettid()不是标准 C,pthread_getname_np()也不是 POSIX。使用pthread_self()。 -
您可以使用
pthread_self()获取pthread_t实例,这是标准的。或者,使用包含pthread_t成员和 ID(例如结构变量的地址)的包装结构,您可以在创建线程时将该地址传递给启动例程。 -
我认为我犯了一个愚蠢的错误,忽略了一个简单的事实,即在预处理状态下线程 ID 是未知的。谢谢大家指出!