CPU yakınlığını Android NDK ile derlenen yerel C koduna ayarlamak mümkün mü? Sistem bir Linux çekirdeği kullandığı için, sched_setaffinity/sched_getaffinity işlevlerini kullanmak mümkün olmalıdır, ancak NDK ile derlediğimde, cpu_set_t türünün bilinmediğinden (ki bu işlevlere bir argüman olarak kullanılır) şikayet ediyor . Bunu başarmanın başka bir yolu var mı? CodeSourcerys ARM derleyicisiyle (arm-none-linux-gnueabi-gcc) derlediğimde, bu bir problem gibi görünmüyor, bu yüzden sistem gerekli sistem çağrılarını destekliyor.Android'de sched_setaffinity ile yakınlık ayarlamak mümkün mü?
13
A
cevap
17
Aşağıdaki kod NDK r5 veya daha yeni iyi çalışır:
#include <sys/syscall.h>
#include <pthread.h>
void setCurrentThreadAffinityMask(int mask)
{
int err, syscallres;
pid_t pid = gettid();
syscallres = syscall(__NR_sched_setaffinity, pid, sizeof(mask), &mask);
if (syscallres)
{
err = errno;
LOGE("Error in the syscall setaffinity: mask=%d=0x%x err=%d=0x%x", mask, mask, err, err);
}
}
teşekkür ederiz, bu işe görünüyor! Gettid() 'in örtük bildirimi hakkında bazı şikayetler alıyorum, ancak sys/types.h (doğru dosya olmalı) olsa bile, derleyiciyi şikayet etmekten alamıyorum. Herhangi bir fikir? – Leo
"pthread.h" yerine "unistd.h" olması gerektiğini düşünüyorum. Projemde çok fazla var ve bu işlev için hangisinin gerekli olduğundan emin değilim. –
@Andrey Kamaev: Merhaba, fonksiyonunuzu kullanmaya çalışıyorum. Giriş maskesi değeri nedir? Maskeyi ayarlama hakkında daha fazla bilgi için – Nrupatunga