2011-09-19 16 views
13

क्या एंड्रॉइड एनडीके के साथ संकलित देशी सी कोड में सीपीयू एफ़िनिटी सेट करना संभव है? चूंकि सिस्टम एक लिनक्स कर्नेल का उपयोग कर रहा है, इसलिए शेड_सेटफिनिटी/शेड_getफिनिटी फ़ंक्शंस का उपयोग करना संभव होना चाहिए, लेकिन जब मैं एनडीके के साथ संकलित करता हूं, तो मुझे त्रुटियां मिलती हैं कि cpu_set_t प्रकार अज्ञात है (जिसे फ़ंक्शंस के लिए तर्क के रूप में उपयोग किया जाता है) । क्या इसे पूरा करने का कोई और तरीका है? जब मैं CodeSourcerys एआरएम कंपाइलर (arm-none-linux-gnueabi-gcc) के साथ संकलित करता हूं, यह एक समस्या प्रतीत नहीं होता है, इसलिए सिस्टम स्पष्ट रूप से आवश्यक सिस्को का समर्थन करता है।एंड्रॉइड में sched_setaffinity के साथ संबंध स्थापित करना संभव है?

उत्तर

17

निम्नलिखित कोड NDK R5 या नए के साथ अच्छी तरह से काम करता है:

#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); 
    } 
} 
+0

धन्यवाद, कि काम करने के लिए लगता है! मुझे गेटिड() की निहित घोषणा के बारे में कुछ शिकायतें मिलती हैं, लेकिन अगर मैं sys/type.h शामिल करता हूं (जो सही फ़ाइल होनी चाहिए), तो मैं शिकायत रोकने के लिए कंपाइलर नहीं प्राप्त कर सकता। कोई विचार? – Leo

+0

मुझे लगता है कि 'pthread.h' के बजाय' unistd.h' होना चाहिए। मेरे प्रोजेक्ट में बहुत से लोग शामिल हैं और मुझे यकीन नहीं है कि इस फ़ंक्शन के लिए कौन सी आवश्यक है। –

+0

@Andrey Kamev: नमस्ते, मैं आपके समारोह का उपयोग करने की कोशिश कर रहा हूँ। इनपुट मास्क मान क्या है? मास्क सेट करने के लिए – Nrupatunga

संबंधित मुद्दे