为何几个线程(2个CPU)只在一个CPU上运行?
为什么几个线程(2个CPU)只在一个CPU上运行?????
电脑上有两个CPU。
我在InitInstance中用:
(或DWORD dwCPUid = SetThreadIdealProcessor( GetCurrentThread() , 0 ) ; )
在另一个线程中使用
(或DWORD dwCPUid = SetThreadIdealProcessor( GetCurrentThread() , 1 ) ; )
没有起作用,两个线程还是一直在CPU 0上运行,没有在CPU 1上运行。
在 任务管理器中也可以看到(右击进程名=>关系设置=>只有CPU0被选中,而CPU1没有被选中)CPU1没有被使用。 如果我在这里也把CPU 1也选中,第二个线程就能够在 CPU 1上运行===通过观察“性能”=>CPU使用率可知
(备注:我的程序为 基于对话框的MFC程序)
不知道是什么原因? 请各位赐教
------解决方案--------------------
应该在线程还没跑的时候就设置了吧 都跑起来了还能设置?
------解决方案--------------------
------解决方案--------------------
HANDLE hTh1 = CreateThred (..., CREATE_SUSPENDED, NULL);
SetThreadAffinityMask(hThread0, 0x00000001);
ResumeThread (hTh1);
------解决方案--------------------
HANDLE hTh1 = CreateThred (..., CREATE_SUSPENDED, NULL); // 创建一个“不运行”的线程
SetThreadAffinityMask(hTh1, 0x00000001); // 设置CPU
ResumeThread (hTh1); // 运行该线程
------解决方案--------------------
你再看清楚一些,人家说的"位"是二进制的位,0x开头的是16进制数
你用电脑里的计算机打开看看,0x0000000e等于二进制的1110
------解决方案--------------------
一共只有两个CPU,CPU0 =0,CPU1=1 ,你那1,2 ,3 是什么!!!!!!!!
电脑上有两个CPU。
我在InitInstance中用:
bresult = SetProcessAffinityMask( GetCurrentProcess() , 3 ) ;
DWORD dwCPUid = SetThreadAffinityMask( GetCurrentThread() , 1 ) ;
(或DWORD dwCPUid = SetThreadIdealProcessor( GetCurrentThread() , 0 ) ; )
在另一个线程中使用
DWORD dwCPUid = SetThreadAffinityMask( GetCurrentThread() , 2 ) ;
(或DWORD dwCPUid = SetThreadIdealProcessor( GetCurrentThread() , 1 ) ; )
没有起作用,两个线程还是一直在CPU 0上运行,没有在CPU 1上运行。
在 任务管理器中也可以看到(右击进程名=>关系设置=>只有CPU0被选中,而CPU1没有被选中)CPU1没有被使用。 如果我在这里也把CPU 1也选中,第二个线程就能够在 CPU 1上运行===通过观察“性能”=>CPU使用率可知
(备注:我的程序为 基于对话框的MFC程序)
不知道是什么原因? 请各位赐教
多线程
性能优化
处理器
------解决方案--------------------
应该在线程还没跑的时候就设置了吧 都跑起来了还能设置?
------解决方案--------------------
//Thread 0 can only run on CPU 0.
SetThreadAffinityMask(hThread0, 0x00000001); //第0位是1
//Threads 1, 2, 3 run on CPUs 1, 2, 3.//第1 2 3位是1
SetThreadAffinityMask(hThread1, 0x0000000E);
SetThreadAffinityMask(hThread2, 0x0000000E);
SetThreadAffinityMask(hThread3, 0x0000000E);
------解决方案--------------------
HANDLE hTh1 = CreateThred (..., CREATE_SUSPENDED, NULL);
SetThreadAffinityMask(hThread0, 0x00000001);
ResumeThread (hTh1);
------解决方案--------------------
HANDLE hTh1 = CreateThred (..., CREATE_SUSPENDED, NULL); // 创建一个“不运行”的线程
SetThreadAffinityMask(hTh1, 0x00000001); // 设置CPU
ResumeThread (hTh1); // 运行该线程
------解决方案--------------------
你再看清楚一些,人家说的"位"是二进制的位,0x开头的是16进制数
你用电脑里的计算机打开看看,0x0000000e等于二进制的1110
------解决方案--------------------
一共只有两个CPU,CPU0 =0,CPU1=1 ,你那1,2 ,3 是什么!!!!!!!!