添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在我们进行多线程开发的过程时,常常需要自己分配线程到不同的处理器上运算,以保证我们程序的运行效率。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编译这些操作能行吗? Qt信号槽连接方式源码解读 BUG_C++: 具体哪里不对,方便指出来吗?认真求教 Qt信号槽连接方式源码解读 BUG_C++: 具体哪里不对,方便指出来吗?认真求教 Qt信号槽连接方式源码解读 Dust_to_Dust: 你这个图片和解释有点不匹配,还有doActive中的几个if else解释也不是很正确,望改进