ソースコードを調べたところ、スレッド数の検出はMacOS XとQNXでのみ実装されており、Linuxやその他のプラットフォームでは実装されていないことがわかりました。そこで、のエントリ数を数えることで、不足している機能を自分で実装しました/proc/self/task
。他の人にも役立つかもしれないので、ここに投稿します(Google Testグループにも送信しました):
size_t GetThreadCount() {
size_t thread_count = 0;
if (DIR *dir = opendir("/proc/self/task")) {
while (dirent *entry = readdir(dir)) {
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0)
++thread_count;
}
closedir(dir);
}
return thread_count;
}
2015年8月25日の時点で、GoogleTestはLinuxに実装さGetThreadCount
れています。
size_t GetThreadCount() {
const string filename =
(Message() << "/proc/" << getpid() << "/stat").GetString();
return ReadProcFileField<int>(filename, 19);
}