sysCall(Sys_gettid)返回-1

时间:2019-10-31 12:52:18

标签: ios unix

我在iOS应用上使用sysCall(Sys_gettid),但返回-1。

const char *elog_port_get_t_info(void) {
    static char cur_thread_info[10] = { 0 };

    snprintf(cur_thread_info, 10, "tid:%04ld", syscall(SYS_gettid));

    return cur_thread_info;
}

1 个答案:

答案 0 :(得分:0)

您不应直接在iOS或macOS上使用syscallgettid调用旨在获取当前线程ID。根据您要执行的操作,有几种选择:

例如,您可以使用pthreads查询线程ID:

#include <pthread.h>
uint64_t tid;
pthread_threadid_np(NULL, &tid);

您还可以使用NSThread。请使用[NSThread currentThread]返回的指针,或者最好使用threadDictionary

(untested)
NSString * identifier = thread.threadDictionary[@"myIDKey"];
if (identifier == nil) {
   identifier = [NSUUID UUID].UUIDString;
   thread.threadDictionary["myIDKey"] = identifier;
}