在调用
请注意,在RunCallback中断点被触发之前,消息已经出现在logcat中。
你知道为什么会出现这个警告吗?如果可以忽略它的话,是安全的吗?如果是,请说明原因。
PS:代码在Nexus 4设备上作为本地活动运行,其OS版本为4.4.2(构建号为KOT49H)。
pthread_create
函数后,我收到了以下消息:
W/libc (26409): pthread_create sched_setscheduler call failed: Operation not permitted
创建线程的代码如下:
pthread_attr_t threadAttr;
int ret = pthread_attr_init(&threadAttr);
//code to check ret - it's 0
size_t guard_size = 0;
pthread_attr_getguardsize(&threadAttr, &guard_size);
ret = pthread_attr_setstacksize(&threadAttr, myStackSize + guard_size);
//code to check ret - it's 0
ret = pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_DETACHED);
//code to check ret - it's 0
ret = pthread_attr_setschedpolicy(&threadAttr, SCHED_FIFO);
//code to check ret - it's 0
sched_param schedParam;
schedParam.sched_priority = myPriority; //it's 16
ret = pthread_attr_setschedparam(&threadAttr, &schedParam);
//code to check ret - it's 0
// Create the thread
ret = pthread_create(&myHandle, &threadAttr, RunCallback, (void *)myData);
//code to check ret - it's 0
//code to check myHandle - it's > 0
// Delete attribute
pthread_attr_destroy(&threadAttr);
请注意,在RunCallback中断点被触发之前,消息已经出现在logcat中。
你知道为什么会出现这个警告吗?如果可以忽略它的话,是安全的吗?如果是,请说明原因。
PS:代码在Nexus 4设备上作为本地活动运行,其OS版本为4.4.2(构建号为KOT49H)。
arm64-v8a
ABI编译Android应用,那么调用pthread_attr_setschedpolicy函数将会默默失败,然后pthread_create函数会失败但是errno==0(这本来是不可能的),并且实际上不会启动线程。所以基本上在Android上你完全不能调用pthread_attr_setschedpolicy()方法;你不能像以前一样忽略警告。我有NDKandroid-ndk-r25c
版本,但是不知道这是从什么时候开始的。 - Louis Semprini