C++11的线程类,创建的线程,如何设置优先级?

iuruteiu 2014-04-22 10:12:59
好像C++11没有提供设置线程优先级的接口啊。
...全文
1983 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrankHB1989 2014-04-22
  • 打赏
  • 举报
回复
考虑一般的实现,std::thread相对于操作系统提供的API算是很高层的一个抽象。而ISO C++实际上根本就没保证std::thread一定就跟操作系统内核线程对应(考虑到freestanding implementation可以根本就没操作系统内核这回事;尽管freestanding implementation实际上不要求支持std::thread),即便现在的实现基本上使用操作系统直接支持的线程实现。退一步讲,就算要求都能调度,也不会单纯就是优先级一种。另外,要是提供了优先级,为什么不提供亲和性的接口?麻烦事太多了。 所以在没有另行提供调度器抽象的情况下,直接通过std::thread使用由操作系统提供的调用接口更加不可能。以后也别指望了。 底层细节嘛,给个hardware_concurrency(还不保证能支持)已经是极限了。 查文档或者看实现然后找对应系统的API。
FancyMouse 2014-04-22
  • 打赏
  • 举报
回复
std::thread::native_handle()
赵4老师 2014-04-22
  • 打赏
  • 举报
回复
参考std:thread的源代码?
iuruteiu 2014-04-22
  • 打赏
  • 举报
回复
std::thread类创建的线程对象,如何获取其HANDLE句柄?
引用 1 楼 zhao4zhong1 的回复:
SetThreadPriority The SetThreadPriority function sets the priority value for the specified thread. This value, together with the priority class of the thread's process, determines the thread's base priority level. BOOL SetThreadPriority( HANDLE hThread, // handle to the thread int nPriority // thread priority level ); Parameters hThread Handle to the thread whose priority value is to be set. Windows NT: The handle must have the THREAD_SET_INFORMATION access right associated with it. nPriority Specifies the priority value for the thread. This parameter can be one of the following values: Priority Meaning THREAD_PRIORITY_ABOVE_NORMAL Indicates 1 point above normal priority for the priority class. THREAD_PRIORITY_BELOW_NORMAL Indicates 1 point below normal priority for the priority class. THREAD_PRIORITY_HIGHEST Indicates 2 points above normal priority for the priority class. THREAD_PRIORITY_IDLE Indicates a base priority level of 1 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 16 for REALTIME_PRIORITY_CLASS processes. THREAD_PRIORITY_LOWEST Indicates 2 points below normal priority for the priority class. THREAD_PRIORITY_NORMAL Indicates normal priority for the priority class. THREAD_PRIORITY_TIME_CRITICAL Indicates a base priority level of 15 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 31 for REALTIME_PRIORITY_CLASS processes. Return Values If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. Remarks Every thread has a base priority level determined by the thread's priority value and the priority class of its process. The system uses the base priority level of all executable threads to determine which thread gets the next slice of CPU time. Threads are scheduled in a round-robin fashion at each priority level, and only when there are no executable threads at a higher level does scheduling of threads at a lower level take place. The SetThreadPriority function enables setting the base priority level of a thread relative to the priority class of its process. For example, specifying THREAD_PRIORITY_HIGHEST in a call to SetThreadPriority for a thread of an IDLE_PRIORITY_CLASS process sets the thread's base priority level to 6. For a table that shows the base priority levels for each combination of priority class and thread priority value, see the SetPriorityClass function. For IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, and HIGH_PRIORITY_CLASS processes, the system dynamically boosts a thread's base priority level when events occur that are important to the thread. REALTIME_PRIORITY_CLASS processes do not receive dynamic boosts. All threads initially start at THREAD_PRIORITY_NORMAL. Use the GetPriorityClass and SetPriorityClass functions to get and set the priority class of a process. Use the GetThreadPriority function to get the priority value of a thread. Use the priority class of a process to differentiate between applications that are time critical and those that have normal or below normal scheduling requirements. Use thread priority values to differentiate the relative priorities of the tasks of a process. For example, a thread that handles input for a window could have a higher priority level than a thread that performs intensive calculations for the CPU. When manipulating priorities, be very careful to ensure that a high-priority thread does not consume all of the available CPU time. A thread with a base priority level above 11 interferes with the normal operation of the operating system. Using REALTIME_PRIORITY_CLASS may cause disk caches to not flush, hang the mouse, and so on. Windows CE: The thread's priority level is one of the following values: THREAD_PRIORITY_TIME_CRITICAL Indicates 3 points above normal priority. THREAD_PRIORITY_HIGHEST Indicates 2 points above normal priority. THREAD_PRIORITY_ABOVE_NORMAL Indicates 1 point above normal priority. THREAD_PRIORITY_NORMAL Indicates normal priority. THREAD_PRIORITY_BELOW_NORMAL Indicates 1 point below normal priority. THREAD_PRIORITY_LOWEST Indicates 2 points below normal priority. THREAD_PRIORITY_ABOVE_IDLE Indicates 3 points below normal priority. THREAD_PRIORITY_IDLE Indicates 4 points below normal priority. Windows CE does not support priority classes. The order in which threads are scheduled is determined only by their thread priorities. When manipulating priorities, ensure that a high-priority thread does not consume all of the available CPU time. A thread with a priority level of THREAD_PRIORITY_TIME_CRITICAL will execute until it explicitly yields processing to other threads. Processing of these threads is not yielded to other threads with the THREAD_PRIORITY_TIME_CRITICAL priority level. Such a thread can interfere with the normal operation of the operating system if the thread does not explicitly yield processing quickly. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winbase.h. Import Library: Use kernel32.lib. See Also Processes and Threads Overview, Process and Thread Functions, GetPriorityClass, GetThreadPriority, SetPriorityClass
赵4老师 2014-04-22
  • 打赏
  • 举报
回复
SetThreadPriority The SetThreadPriority function sets the priority value for the specified thread. This value, together with the priority class of the thread's process, determines the thread's base priority level. BOOL SetThreadPriority( HANDLE hThread, // handle to the thread int nPriority // thread priority level ); Parameters hThread Handle to the thread whose priority value is to be set. Windows NT: The handle must have the THREAD_SET_INFORMATION access right associated with it. nPriority Specifies the priority value for the thread. This parameter can be one of the following values: Priority Meaning THREAD_PRIORITY_ABOVE_NORMAL Indicates 1 point above normal priority for the priority class. THREAD_PRIORITY_BELOW_NORMAL Indicates 1 point below normal priority for the priority class. THREAD_PRIORITY_HIGHEST Indicates 2 points above normal priority for the priority class. THREAD_PRIORITY_IDLE Indicates a base priority level of 1 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 16 for REALTIME_PRIORITY_CLASS processes. THREAD_PRIORITY_LOWEST Indicates 2 points below normal priority for the priority class. THREAD_PRIORITY_NORMAL Indicates normal priority for the priority class. THREAD_PRIORITY_TIME_CRITICAL Indicates a base priority level of 15 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 31 for REALTIME_PRIORITY_CLASS processes. Return Values If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. Remarks Every thread has a base priority level determined by the thread's priority value and the priority class of its process. The system uses the base priority level of all executable threads to determine which thread gets the next slice of CPU time. Threads are scheduled in a round-robin fashion at each priority level, and only when there are no executable threads at a higher level does scheduling of threads at a lower level take place. The SetThreadPriority function enables setting the base priority level of a thread relative to the priority class of its process. For example, specifying THREAD_PRIORITY_HIGHEST in a call to SetThreadPriority for a thread of an IDLE_PRIORITY_CLASS process sets the thread's base priority level to 6. For a table that shows the base priority levels for each combination of priority class and thread priority value, see the SetPriorityClass function. For IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, and HIGH_PRIORITY_CLASS processes, the system dynamically boosts a thread's base priority level when events occur that are important to the thread. REALTIME_PRIORITY_CLASS processes do not receive dynamic boosts. All threads initially start at THREAD_PRIORITY_NORMAL. Use the GetPriorityClass and SetPriorityClass functions to get and set the priority class of a process. Use the GetThreadPriority function to get the priority value of a thread. Use the priority class of a process to differentiate between applications that are time critical and those that have normal or below normal scheduling requirements. Use thread priority values to differentiate the relative priorities of the tasks of a process. For example, a thread that handles input for a window could have a higher priority level than a thread that performs intensive calculations for the CPU. When manipulating priorities, be very careful to ensure that a high-priority thread does not consume all of the available CPU time. A thread with a base priority level above 11 interferes with the normal operation of the operating system. Using REALTIME_PRIORITY_CLASS may cause disk caches to not flush, hang the mouse, and so on. Windows CE: The thread's priority level is one of the following values: THREAD_PRIORITY_TIME_CRITICAL Indicates 3 points above normal priority. THREAD_PRIORITY_HIGHEST Indicates 2 points above normal priority. THREAD_PRIORITY_ABOVE_NORMAL Indicates 1 point above normal priority. THREAD_PRIORITY_NORMAL Indicates normal priority. THREAD_PRIORITY_BELOW_NORMAL Indicates 1 point below normal priority. THREAD_PRIORITY_LOWEST Indicates 2 points below normal priority. THREAD_PRIORITY_ABOVE_IDLE Indicates 3 points below normal priority. THREAD_PRIORITY_IDLE Indicates 4 points below normal priority. Windows CE does not support priority classes. The order in which threads are scheduled is determined only by their thread priorities. When manipulating priorities, ensure that a high-priority thread does not consume all of the available CPU time. A thread with a priority level of THREAD_PRIORITY_TIME_CRITICAL will execute until it explicitly yields processing to other threads. Processing of these threads is not yielded to other threads with the THREAD_PRIORITY_TIME_CRITICAL priority level. Such a thread can interfere with the normal operation of the operating system if the thread does not explicitly yield processing quickly. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winbase.h. Import Library: Use kernel32.lib. See Also Processes and Threads Overview, Process and Thread Functions, GetPriorityClass, GetThreadPriority, SetPriorityClass
lm_whales 2014-04-22
  • 打赏
  • 举报
回复
引用 4 楼 FancyMouse 的回复:
std::thread::native_handle()
就是这个了,找到这个,还怕不能使用API么

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧