21xrx.com
2024-11-05 19:35:54 Tuesday
登录
文章检索 我的文章 写文章
C++如何获取线程ID?
2023-07-05 20:35:47 深夜i     --     --
C++ 线程 ID 获取

在C++中获取线程ID是一项常见的任务,因为它可以用于调试和多线程编程。在本文中,将介绍几种方法来获取线程ID。

1.使用std::this_thread::get_id()

在C++11和更高版本中,可以使用std::this_thread::get_id()函数来获取当前线程的ID。该函数返回std::thread::id类型,可以将其转换为long类型。

例如:


#include <iostream>

#include <thread>

using namespace std;

int main() {

  cout << "Thread ID: " << std::this_thread::get_id() << endl;

  return 0;

}

输出结果:


Thread ID: 0x70000d56c000

2.使用pthread库

如果需要在Linux系统上获取线程ID,则需要使用pthread库中的pthread_self()函数。

例如:


#include <iostream>

#include <pthread.h>

using namespace std;

void* thread_func(void* arg) {

  cout << "Thread ID: " << pthread_self() << endl;

  return NULL;

}

int main() {

  pthread_t thread;

  pthread_create(&thread, NULL, thread_func, NULL);

  pthread_join(thread, NULL);

  return 0;

}

输出结果:


Thread ID: 140605384177152

3.使用Windows API

如果需要在Windows系统上获取线程ID,则需要使用Windows API中的GetCurrentThreadId()函数。

例如:


#include <iostream>

#include <windows.h>

using namespace std;

void thread_func() {

  cout << "Thread ID: " << GetCurrentThreadId() << endl;

}

int main() {

  HANDLE thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_func, NULL, 0, NULL);

  WaitForSingleObject(thread, INFINITE);

  CloseHandle(thread);

  return 0;

}

输出结果:


Thread ID: 17800

总结

以上是获取线程ID的三种常见方法。使用std::this_thread::get_id()函数是最简单的方法,但仅适用于C++11及更高版本。如果在Linux系统上运行,需要使用pthread_self()函数。如果在Windows系统上运行,需要使用GetCurrentThreadId()函数。根据操作系统和编译器的不同,也可以使用其他方法来获取线程ID,但上述方法是最常见的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复