#include "stdafx.h" HANDLE *m_threads; int getNumLogicalCPUs() { SYSTEM_INFO si; ZeroMemory(&si, sizeof(SYSTEM_INFO)); GetSystemInfo(&si); return si.dwNumberOfProcessors; } DWORD workerProc(LPVOID lpParameter); int wmain(int argc, wchar_t* argv[]) { int cpus = getNumLogicalCPUs(); m_threads = new HANDLE[cpus]; wprintf(L"There are %d logical CPUs\r\n", cpus); for(int i = 0; i < cpus; i++) { wprintf(L"Creating Thread %d\r\n", i); m_threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)workerProc, (LPVOID)i, 0, NULL); wprintf(L"Setting Thread 0x%08p Affinity to CPU%d\r\n", m_threads[i], i); SetThreadAffinityMask(m_threads[i], i); } return 0; } DWORD workerProc(LPVOID lpParameter) { int i = (int)lpParameter; //do some work later return 0; }