|
回复 11# 白鱼 的帖子
既然你说到基本知识,我便来讲解一下所谓的“基本知识”:
一般而言, 线程任务由哪个核负担是由系统分配的, 除非程序自身带有屏蔽某核的指令, 否则系统会让程序运行一段时间后, 让几个核的工作尽量平均.
查找msdn文档, 得知SetThreadAffinityMask这个API是用来指定线程工作的. 快速打开代码部分, 发现在主循环中每次经过这裡:
push 1 ; /AffinityMask = 1
call dword ptr [<&kernel32.GetCurrent..>; |[GetCurrentThread
push eax ; |hThread
call dword ptr [<&kernel32.SetThreadA..>; SetThreadAffinityMask
AffinityMask参数被设成1了, 依照msdn文档的定义, 这表示屏蔽第一核以外的所有核心(BIN:00000001), 那么要修复这个bug(虽说不一定是bug, 可能有其他用意)就很容易了, 将该参数设为bin:11111111(0xff), 即可解除对其他核的屏蔽. (经实验, 设0有同样效果)
看懂了吗?不懂也么办法了,基本知识而已
自己去查查古剑和火炬的程序代码,我不解释了 |
|