C++ SetThreadAffinityMask()似乎不会多次生效

C++ SetThreadAffinityMask()似乎不会多次生效,c++,windows,winapi,visual-c++,C++,Windows,Winapi,Visual C++,每次我通过按下按钮运行线程时,我都试图将线程的关联设置为某个掩码。在我打开窗户后第一次做这件事时,它会起作用,但在那之后就不行了。但是,我的OutputDebugString代码生成的输出表明它已被更改。我尝试过使用CloseHandle(),但似乎没有效果。还有什么别的可能吗 void CSMPDemoDlg::OnBnClickedButton1() { // Start thread DWORD_PTR affinityMask = (static_cast<DWOR

每次我通过按下按钮运行线程时,我都试图将线程的关联设置为某个掩码。在我打开窗户后第一次做这件事时,它会起作用,但在那之后就不行了。但是,我的
OutputDebugString
代码生成的输出表明它已被更改。我尝试过使用
CloseHandle()
,但似乎没有效果。还有什么别的可能吗

void CSMPDemoDlg::OnBnClickedButton1()
{
    // Start thread
    DWORD_PTR affinityMask = (static_cast<DWORD_PTR>(1) << NumberOfCores ) - 1;

    HANDLE WorkThreadHandle = CreateThread(NULL, 0, WorkThread, &tp, 0, NULL);
    DWORD_PTR z = SetThreadAffinityMask(WorkThreadHandle, affinityMask);

    if (z!=0) {
        char bb[100];
        sprintf_s(bb, 100, "Affinity changed from %d to %d", z, affinityMask);
        OutputDebugString(bb);
    }
}    
void csmpdemolg::OnBnClickedButton1()
{
//起始线程

DWORD_PTR affinityMask=(static_cast(1)因此,您需要如下内容:

 static count = 0;
 DWORD_PTR affinityMask = (static_cast<DWORD_PTR>(1) << NumberOfCores ) - 1;
 affinityMask <<= ((count * numberOfCores)  % totalCores);
静态计数=0;

DWORD_PTR affinityMask=(static_cast(1)因此,您需要如下内容:

 static count = 0;
 DWORD_PTR affinityMask = (static_cast<DWORD_PTR>(1) << NumberOfCores ) - 1;
 affinityMask <<= ((count * numberOfCores)  % totalCores);
静态计数=0;

DWORD_PTR affinityMask=(静态_cast(1)你希望看到什么不同?你看到了什么?顺便说一句,你每次都将掩码设置为相同的值,那么你希望它如何改变事情?我正在编写一个基准测试程序,在使用不同数量的内核运行例程时测量性能。因此它将在1个、2个、4个内核上运行。然而,当n我在1个内核上运行,它在内核之间跳跃,导致我的图形有点难以读取。我正在尝试设置关联,以便它在我希望的内核上运行,生成更好的图形。(我知道设置关联很可能会降低性能,这没关系).NumberOfCores是一个在其他地方更改的变量,只是我代码的一个示例,很抱歉,我应该说明清楚。然后,请解释发生了什么/它与您期望的不同之处。每次我按下按钮,都应该启动一个线程(使用我设置的关联)。运行一次线程,我可以在任务管理器(以及我的图表)中看到它是在我选择的内核上运行的,因为相应的图形将高达~100%。但是当我在程序中更改设置并再次按下按钮时,它应该在不同的内核上运行。但是它和以前一样在相同的内核上运行,而不是在新设置的内核上运行。所以基本上,一旦我设置了一次,它就不会让我再次设置亲和力。你希望看到什么不同?你看到了什么?顺便问一下,你每次都将掩码设置为相同的值,那么你希望它如何改变情况?我正在编写一个基准测试程序,它在使用不同数量的内核运行例程时测量性能。因此它将在1个、2个、4个内核上运行。然而,当n我在1个内核上运行,它在内核之间跳跃,导致我的图形有点难以读取。我正在尝试设置关联,以便它在我希望的内核上运行,生成更好的图形。(我知道设置关联很可能会降低性能,这没关系).NumberOfCores是一个在其他地方更改的变量,只是我代码的一个示例,很抱歉,我应该说明清楚。然后,请解释发生了什么/它与您期望的不同之处。每次我按下按钮,都应该启动一个线程(使用我设置的关联)。运行一次线程,我可以在任务管理器(以及我的图表)中看到它是在我选择的内核上运行的,因为相应的图形将高达~100%。但是当我在程序中更改设置并再次按下按钮时,它应该在不同的内核上运行。但是它和以前一样在相同的内核上运行,而不是在新设置的内核上运行。所以基本上,一旦我设置了一次,它就不会让我再次设置亲和力.