関数を呼び出した後pthread_create
、次のメッセージを受け取ります。
W/libc (26409): pthread_create sched_setscheduler 呼び出しが失敗しました: 操作は許可されていません
スレッドの作成に使用されるコードは次のとおりです。
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: コードは、4.4.2 OS バージョン (ビルド番号 KOT49H) の Nexus 4 デバイスでネイティブ アクティビティとして実行されます。