vc 下設定執行緒到特定cpu中

2021-05-21 14:07:19 字數 1430 閱讀 5819

setprocessaffinitymask

bool setprocessaffinitymask(handlehprocess

,dword_ptrdwprocessaffinitymask

));

設定特定的程序執行在特定的cpu中,適用於多核cpu中,後面的dwprocessaffinitymask

這個掩碼就是開啟特定cpu的開關,

我查了msdn,上面說的不清楚,最後在網路technet上面找到答案:

也就是說乙個位元組,八位關聯掩碼可以涵蓋8個cpu,以後的以此類推,每個0或1代表cpu的開關,於是就有,由於我是在8核機器上進行測試,

所以乙個位元組便能滿足需要,

舉例:開啟第0個cpu:00000001(二進位制)=1(十進位制)

開啟第1個cpu:00000010(二進位制)=2(十進位制)

開啟第2個cpu:00000100(二進位制)=4(十進位制)

開啟第3個cpu:00001000(二進位制)=8(十進位制)

開啟第1和第3個cpu:00001000(二進位制)+ 00000010=8(十進位制)+ 2(十進位制)=10(十進位制)

開啟第七和第八個cpu:1000000(二進位制)+ 01000000=128(十進位制)+ 64(十進位制)=192(十進位制)

我需要將我的執行緒繫結到cpu0,和cpu2,cpu3上,則可以這樣:

setprocessaffinitymask(::getcurrentprocrss( ) , 13l);

就這麼簡單…………

bool getprocessaffinitymask( handlehprocess

,// handle to processpdword_ptrlpprocessaffinitymask

,// process affinity maskpdword_ptrlpsystemaffinitymask

// system affinity mask);

這個函式則是獲取當前程序所在的cpu親和掩碼,和系統system擁有的cpu的掩碼,具體的看msdn,用法跟setprocessaffinitymask差不多

setthrradaffinitymask

setthreadaffinitymask

setthreadidealprocessor設定執行緒最想執行的cpu

繫結執行緒到特定CPU處理器

參考這篇文章 如下 define gnu source include include include include include include void myfun void arg cpu zero get if pthread getaffinity np pthread self si...

在VC 6 0下設定GDI

2.在你將要使用gdi 的工程中,完成初始化工作 在stdafx.h中加入 define ulong ptr unsigned long include using namespace gdiplus include gdiplus.h gdiplusstartupinput m gdiplusst...

linux下設定執行緒優先順序

在linux下我們可以通過 int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg 來建立執行緒,但是如何設定執行緒的優先順序呢?在討論這個問題的時候,我們先要確定當...