この StackOverflow の質問からの回答に従って、マスクに適切な整数を作成するにはどうすればよいですか?
私はいくつかのグーグルを作成し、見つかったものはすべてCPU_SET
マクロを使用していますが、NDK を使用する場合は未定義の構造でsched.h
動作します。cpu_set_t
リンカーを使用しようとすると、CPU_SET
未定義の参照エラーが発生します (pthread に対してリンクしているにもかかわらず)。
この StackOverflow の質問からの回答に従って、マスクに適切な整数を作成するにはどうすればよいですか?
私はいくつかのグーグルを作成し、見つかったものはすべてCPU_SET
マクロを使用していますが、NDK を使用する場合は未定義の構造でsched.h
動作します。cpu_set_t
リンカーを使用しようとすると、CPU_SET
未定義の参照エラーが発生します (pthread に対してリンクしているにもかかわらず)。
最終的に、 から直接取得したバージョンを見つけましたsched.h
。誰かが同じ問題を抱えていて、検索に時間を費やしたくない場合は、ここに投稿します。これは非常に便利です。
#define CPU_SETSIZE 1024
#define __NCPUBITS (8 * sizeof (unsigned long))
typedef struct
{
unsigned long __bits[CPU_SETSIZE / __NCPUBITS];
} cpu_set_t;
#define CPU_SET(cpu, cpusetp) \
((cpusetp)->__bits[(cpu)/__NCPUBITS] |= (1UL << ((cpu) % __NCPUBITS)))
#define CPU_ZERO(cpusetp) \
memset((cpusetp), 0, sizeof(cpu_set_t))
setCurrentThreadAffinityMask
これは、元の(質問で言及された投稿からの)パラメータータイプが単純に に置き換えられた場合にうまく機能しますcpu_set_t
。
最初の投稿のリンクからの関数は、スレッドの CPU アフィニティを設定しないことに注意してください。プロセスの CPU アフィニティを設定するのに適しています。もちろん、アプリケーションにスレッドが 1 つあれば問題なく動作しますが、スレッドが複数ある場合は正しくありません。たとえば、http: //linux.die.net/man/2/sched_setaffinity で sched_setaffinity() の説明を確認してください。
インクルードする前にこれを追加してみてください<sched.h>
#define _GNU_SOURCE