pan*_*ami 1 c++ windows multithreading setthreadaffinitymask
下面的代码确实编译并运行,除了输出不是我期望的那样.我希望程序创建n个线程(取决于可用的多核数量)并运行在程序结束时找到的简单例程进行输出
"测试"
接下来是1-10.我得到的是一个输出,它写了一些数字,但它最多不超过两个,并且函数threadmain似乎不完全在一个线程上运行,但它有点输出测试:012在其他线程.我知道多线程会破坏输出,但我应该在屏幕的某处看到数字3,4,5,6,7,8,9,但它没有显示出来.
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <cmath>
#include <iostream>
HANDLE *m_threads = NULL;
static DWORD_PTR WINAPI threadMain(void* p);
DWORD_PTR GetNumCPUs()
{
SYSTEM_INFO m_si = {0, };
GetSystemInfo(&m_si);
return (DWORD_PTR)m_si.dwNumberOfProcessors;
}
CRITICAL_SECTION g_crit_sec;
static int g_start = 0;
int main(int argc, char **args)
{
DWORD_PTR c = GetNumCPUs();
m_threads = new HANDLE[c];
InitializeCriticalSectionAndSpinCount(&g_crit_sec, 0x80000400);
for(DWORD_PTR i = 0; i < c; i++)
{
DWORD_PTR m_id = 0;
DWORD_PTR m_mask = 1 << i;
m_threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadMain, (LPVOID)i, NULL, &m_id);
SetThreadAffinityMask(m_threads[i], m_mask);
//wprintf(L"Creating Thread %d (0x%08x) Assigning to CPU 0x%08x\r\n", i, (LONG_PTR)m_threads[i], m_mask);
}
return 0;
}
static DWORD_PTR WINAPI threadMain(void* p)
{
double result = 0.0;
for (int i = 0; i < 10; i++)
{
std::cout<<"testing: "<<i<<std::endl;
//result = result + sin(i) * tan(i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您的应用程序在线程运行之前终止.在启动线程后,在主函数中调用一个Sleep()或多个适当的WaitForMultipleObjects()调用,如下所示:
int main(int argc, char **args)
{
DWORD_PTR c = GetNumCPUs();
m_threads = new HANDLE[c];
InitializeCriticalSectionAndSpinCount(&g_crit_sec, 0x80000400);
for(DWORD_PTR i = 0; i < c; i++)
{
DWORD_PTR m_id = 0;
DWORD_PTR m_mask = 1 << i;
m_threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadMain, (LPVOID)i, NULL, (LPDWORD)&m_id);
SetThreadAffinityMask(m_threads[i], m_mask);
//wprintf(L"Creating Thread %d (0x%08x) Assigning to CPU 0x%08x\r\n", i, (LONG_PTR)m_threads[i], m_mask);
}
// Waits for all started threads to complete:
WaitForMultipleObjects(c, m_threads, TRUE, INFINITE);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |