您现在的位置: 爱51代码网 >> 范文 >> 文章正文
D7多线程如何分配CPU

D7多线程如何分配CPU

请教下。我用D7做了个多线程的程序,运行的时候发现,就算多线程也只是用CPU的一个核。我运行在至强CPU服务器上,有一个核基本都跑到100%了,其他3个核还空闲着。我要怎么解决这个问题,让程序跑的跟有效率一点?

用这个
SetThreadAffinityMask

正常来说操作系统会帮你做自动分配线程的处理器亲缘性.
当然也可以用SetThreadAffinityMask来强制设置线程的处理器亲缘性.

但是如果你一个线程机器消耗CPU资源,而其他线程几乎不消耗CPU资源,那么你看到一个核心资源占用高也是正常的.

program Project1;   {$APPTYPE CONSOLE}   uses  SysUtils,   Classes,   Windows;   type  TRunThread = class(TThread)   protected    procedure Execute(); override;   end; var  dwCpuCount: Cardinal;   curCpu: Cardinal = 0; procedure TRunThread.Execute; var  startTime: Cardinal; begin  startTime := GetTickCount;   while not Terminated do  begin      if GetTickCount - startTime > 8000 then    begin      Inc(curCpu);       if curCpu > dwCpuCount then        curCpu := 0;       SetThreadAffinityMask(Self.Handle, curCpu);       startTime := GetTickCount;     end;   end; end;   function getCpuCount: Cardinal; var  sysinfo: TSystemInfo; begin  GetSystemInfo(sysinfo);   Result := sysinfo.dwNumberOfProcessors; end;   begin  dwCpuCount := getCpuCount;   TRunThread.Create(False);   Readln; end.

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    lotus代理中LS如何将字符串保存到
    在lotus BS系统里怎样方便实现统
    不小心卸载了.net 4 extend,vs2
    C#的session取不到值
    java如何判断一个字符串里的数字
    java怎么实现html转为pdf
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    Failed to open eth0
    android手机无法与eclipse或电脑
    C/C++洗牌算法源代码
    E-business suite system servic
    E2015 Operator not applica
    DSPACK_V233安装找不到控件
    as3 delphi向flash发送数据问
    DBNETLIB][ConnectionOpen (
    delphi强制卸载DLL源代码
    Delphi6在XP下开发的程序在W
    xe2怎么没有图形编辑器
    delphi挂起一个进程中的线程
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |