在我们进行多线程开发的过程时,常常需要自己分配线程到不同的处理器上运算,以保证我们程序的运行效率。SetThreadAffinityMask是我们常见的选择。
1.MSDN中函数的定义
DWORD_PTR WINAPI SetThreadAffinityMask(
_In_ HANDLE hThread,
_In_ DWORD_PTR dwThreadAffinityMask
参数hThread
就是我们在使用传进去线程的句柄,dwThreadAffinityMask
就是我们要传入的处理器掩码
2.掩码常见问题
0x00000001,折就是一个最常见的处理器掩码,这个就是代表使用第一个处理器,如下图所示的i5双核心四线程的处理器CPU0(逻辑上的第一个)。0x00000008就是代表在CPU3(逻辑上的第四个)上运行
对于以前的电脑大多都是这样双核心四线程,我来解释下8核处理器及更多cpu核心的是如何分配到后四个处理器上的
如上图所示,一个32核cpu,当我们想使用
第6个cpu运行线程时,那么掩码就是0x00000020
第7个cpu运行线程时,那么掩码就是0x00000040
第8个cpu运行线程时,那么掩码就是0x00000080
第5个和第7个cpu运行线程时,那么掩码就是0x00000050
第7个和第8个cpu运行线程时,那么掩码就是0x000000C0
第2个和第7个和第8个cpu运行线程时,那么掩码就是0x000000C2
第2个和第4个和第7个和第8个cpu运行线程时,那么掩码就是0x000000CA
以此类推
在我们进行多线程开发的过程时,常常需要自己分配线程到不同的处理器上运算,以保证我们程序的运行效率。SetThreadAffinityMask是我们常见的选择。 1.MSDN中函数的定义DWORD_PTR WINAPI SetThreadAffinityMask( _In_ HANDLE hThread, _In_ DWORD_PTR dwThreadAffinityMask);参数
MSDN上的描述:
[code="c++"]SetThreadAffinityMask
The SetThreadAffinityMask function sets a processor affinity mask for the specified thread.
DWORD_PTR SetThreadAffinityMask(
HANDLE hThread,
DWOR...
#define USE__beginthreadex
#ifndef USE__beginthreadex
unsigned __stdcall func(void * pParam)
进程与指定cpu绑定:SetProcessAffinityMask(GetCurrentProcess(), dwMask);
线程与指定cpu绑定:SetThreadAffinityMask(GetCurrentThread(),dwMask);
dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表
设置线程亲和性,通俗的说法就是将线程绑定到cpu上某一个或多个核上,此处的核是指逻辑核心,非物理核心。
物理核心与逻辑核心的关系,如果开启超线程,一般逻辑核心数=物理核心数*2。
一、SetThreadAffinityMask
微软帮助:
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setthreadaffinitymask
函数定义如下:
DWORD_PTR SetThreadAffinityMask(HAND
GetSystemInfo(&si);<br /><br />
short nValue = 0x0001;<br />
for (int i=0; i<(si.dwNumberOfProcessors-1); ++i)<br />
{<br />
nValue = nValue << 1;<br
在Qt中,可以使用Qt的QThread类来创建和管理线程。然而,Qt本身并没有提供直接设置进程或线程在特定CPU上运行的功能。这通常由操作系统来处理。
如果你想在特定的CPU上运行进程或线程,你可以通过操作系统提供的相关功能来实现。以下是一些常见的方法:
1. Windows操作系统:可以使用SetProcessAffinityMask函数或SetThreadAffinityMask函数来设置进程或线程的亲和性掩码。亲和性掩码指定了进程或线程可以运行的处理器集合。你可以将亲和性掩码设置为与目标CPU对应的位掩码。
2. Linux操作系统:可以使用sched_setaffinity函数来设置进程或线程的CPU亲和性。你可以指定一个CPU集合,将进程或线程限制在该集合中运行。
3. macOS操作系统:可以使用pthread_setaffinity_np函数来设置线程的CPU亲和性。你可以指定一个CPU集合,将线程限制在该集合中运行。
请注意,这些方法都是与操作系统相关的,并且Qt本身没有提供跨平台的解决方案。因此,你需要根据你的目标平台选择适当的方法,并进行相应的操作。
希望这能帮到你!如果你有更多的问题,请继续提问。
Launching lib\main.dart on Windows in debug mode...
lib\main.dart:1
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(241,5): error MSB8066: ��D:\codeLibrary\flutterProject1\flutter_application_2\flutter_application_2\build\windows\CMakeFiles\cb252d417d44028aba8c73312ca6fafc\flutter_windows.dll.rule;D:\codeLibrary\flutterProject1\flutter_application_2\flutter_application_2\build\windows\CMakeFiles\b5d3635462f1f9d86f04b19fe73e16a1\flutter_assemble.rule�����Զ����������˳�������Ϊ 1�� [D:\codeLibrary\flutterProject1\flutter_application_2\flutter_application_2\build\windows\flutter\flutter_assemble.vcxproj]
Exception: Build process failed.
QT支持https及编译OpenSSL
html_dog:
Qt信号槽连接方式源码解读
BUG_C++:
Qt信号槽连接方式源码解读
BUG_C++:
Qt信号槽连接方式源码解读
Dust_to_Dust: