阅读量:0
在 C++ 中,可以使用 std::thread
类来创建和管理线程。但是,std::thread
类本身并不提供直接设置线程优先级的方法。要设置线程优先级,需要使用操作系统相关的 API。
以下是一个示例,展示了如何在 Linux 和 Windows 平台上设置线程优先级:
#include<iostream> #include<thread> #include<chrono> #ifdef _WIN32 #include<windows.h> #else #include <pthread.h> #include <sched.h> #endif void set_thread_priority(std::thread& thread, int priority) { auto native_handle = thread.native_handle(); #ifdef _WIN32 // Windows 平台 SetThreadPriority(native_handle, priority); #else // Linux 平台 sched_param sch; int policy; pthread_getschedparam(native_handle, &policy, &sch); sch.sched_priority = priority; pthread_setschedparam(native_handle, policy, &sch); #endif } void thread_function() { std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "Thread finished"<< std::endl; } int main() { std::thread my_thread(thread_function); // 设置线程优先级 #ifdef _WIN32 set_thread_priority(my_thread, THREAD_PRIORITY_HIGHEST); #else set_thread_priority(my_thread, 90); #endif my_thread.join(); return 0; }
在这个示例中,我们定义了一个名为 set_thread_priority
的函数,该函数接受一个 std::thread
对象和一个表示优先级的整数。然后,根据当前平台(Windows 或 Linux),我们使用相应的 API 设置线程优先级。
请注意,这个示例仅适用于 Linux 和 Windows 平台。在其他平台上,您可能需要使用不同的 API 来设置线程优先级。此外,线程优先级的具体值和行为可能因操作系统而异,因此在设置优先级时要谨慎。