Saltar al contenido

Ejemplo de uso de SetProcessAffinityMask en C++?

Esta inquietud se puede tratar de diferentes maneras, pero en este caso te mostramos la que en nuestra opinión es la resolución más completa.

Solución:

El segundo parámetro es una máscara de bits, donde un bit que está establecido significa que el proceso puede ejecutarse en ese procesador, y un bit que está claro significa que no puede.

En su caso, para que cada proceso se ejecute en un núcleo separado, podría (por una posibilidad) pasar un argumento de línea de comando dando a cada proceso un número, y usar ese número dentro del proceso para determinar el procesador a usar:

#include 
#include 

using namespace std;

int main (int argc, char **argv) 
    HANDLE process = GetCurrentProcess();
    DWORD_PTR processAffinityMask = 1 << atoi(argv[1]);

    BOOL success = SetProcessAffinityMask(process, processAffinityMask);

    cout << success << endl;
    return 0;

Entonces ejecutarías esto con algo como:

for %c in (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) do test %c

Como ya se mencionó, es una máscara de bits. Es posible que desee utilizar el resultado de GetProcessAffinityMask, en caso de que su proceso o sistema aún no tenga acceso a todos los núcleos. Esto es lo que se me ocurrió.

#include 
#include 
using namespace std; 
 
int main ()  
 
    HANDLE process = GetCurrentProcess(); 
 
    DWORD_PTR processAffinityMask;
    DWORD_PTR systemAffinityMask;

    if (!GetProcessAffinityMask(process, &processAffinityMask, &systemAffinityMask))
        return -1;

    int core = 2; /* set this to the core you want your process to run on */
    DWORD_PTR mask=0x1;
    for (int bit=0, currentCore=1; bit < 64; bit++)
    
        if (mask & processAffinityMask)
        
            if (currentCore != core)
            
                processAffinityMask &= ~mask;
             else
            
                if ( !(systemAffinityMask & mask) )
                
                    cerr << "Core " << core << " not enabled in system." << endl;
                
            
            currentCore++;
        
        mask = mask << 1;
    

    BOOL success = SetProcessAffinityMask(process, processAffinityMask & systemAffinityMask); 
 
    cout << success << endl; 
 
    return 0; 
 
 

Si para ti ha resultado de provecho nuestro post, nos gustaría que lo compartas con otros seniors de esta forma contrubuyes a extender esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *