internal class Program
{
[DllImport("kernel32.dll")]
private static extern uint GetTickCount(); //SetThreadAffinityMask 指定hThread 运行在 核心 dwThreadAffinityMask
[DllImport("kernel32.dll")]
private static extern UIntPtr SetThreadAffinityMask(IntPtr hThread,
UIntPtr dwThreadAffinityMask); //得到当前线程的handler
[DllImport("kernel32.dll")]
private static extern IntPtr GetCurrentThread(); private static void Main(string[] args)
{
var t1 = new Thread(sinaG);
Console.Write("Which core you will to use (Start from 0):");
string core = Console.ReadLine();
int coreNumber = ;
try
{
coreNumber = Int32.Parse(core);
}
catch
{
coreNumber = ;
}
t1.Start(coreNumber);
} private static void sinaG(object coreNumber)
{
int core = ;
try
{
core = (int) coreNumber;
}
catch
{
core = ;
}
SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(SetCpuID(core)));
//指定在核心1上运行
//SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(SetCpuID(0)));
//指定在核心2上运行
//SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(SetCpuID(1)));
//指定在核心3上运行
//SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(SetCpuID(2)));
//指定在核心4上运行
//SetThreadAffinityMask(GetCurrentThread(), new UIntPtr(SetCpuID(3))) //split*count=2;也就是正弦函数的周期2 Pi,也就是把一个周期的细分为200份
double split = 0.01;
int count = ; double pi = 3.1415962525; //工作周期 300 ms
int interval = ; //每个工作周期里工作和空闲的毫秒数
var busySpan = new int[count];
var idealSpan = new int[count]; //根据正弦函数计算并填入每个工作周期的工作和空闲毫秒数
int half = interval/;
double radian = 0.0;
for (int i = ; i < count; i++)
{
busySpan[i] = (int) (half + Math.Sin(pi*radian)*half);
idealSpan[i] = interval - busySpan[i];
radian += split;
} uint startTime = ;
int j = ;
while (true)
{
j = j%count;
startTime = GetTickCount();
while ((GetTickCount() - startTime) <= busySpan[j])
{
;
}
Thread.Sleep(idealSpan[j]);
j++;
}
} //函数中的参数 dwThreadAffinityMask 为无符号长整型,用位标识那个核心
//比如:为简洁使用四位表示
//0x0001表示核心1,
//0x0010表示核心2,
//0x0100表示核心3,
//0x1000表示核心4
private static ulong SetCpuID(int id)
{
ulong cpuid = ;
if (id < || id >= Environment.ProcessorCount)
{
id = ;
}
cpuid |= 1UL << id;
return cpuid;
}
}

为程序指定运行时所在的CPU核的更多相关文章

  1. 更为复杂C程序的运行时结构

    运行环境 win 10 企业版 1809 17763.194,MinGW V3.14 32位,Bundled V3.13.2,Bundled GDB V8.2. 在C语言中,栈的方向是从高地址向低地址 ...

  2. 转: gcc 指定运行时动态库路径

    gcc 指定运行时动态库路径 Leave a reply 由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录 ...

  3. [快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)

    作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂, ...

  4. 图解简单C程序的运行时结构

    程序在内存中的存储分为三个区域,分别是动态数据区.静态数据区和代码区.函数存储在代码区,全局变量以及静态变量存储在静态数据区,而在程序执行的时候才会在动态数据区产生数据.程序执行的本质就是代码区的指令 ...

  5. 如何让Qt程序在运行时获取UAC权限

    在pro文件中加入以下语句: QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\' ...

  6. Laravel 使用 Provider 为程序提供运行时配置服务

    需求: 配置参数存在数据库中,Model 是 aah,需要在每次运行时,程序可以在任何地方采用 config("aah.name") 的方式访问配置信息. 思路: 采用 Provi ...

  7. 关于java程序在运行时出现a java exception has occured时解决方法

    错误截图: 出现情况原因分析: 1.环境没有配置好,配置java环境变量: 参考 检查是否正确,java javac,可以尝试重新 2.查看使用的jdk版本是否存在版本问题: 例如jdk1.7对中文的 ...

  8. c#+handle.exe实现升级程序在运行时自动解除文件被占用的问题

    我公司最近升级程序经常报出更新失败问题,究其原因,原来是更新时,他们可能又打开了正在被更新的文件,导致更新文件时,文件被其它进程占用,无法正常更新而报错,为了解决这个问题,我花了一周时间查询多方资料及 ...

  9. Linux 指定运行时动态库路径【转】

    转自:http://www.cnblogs.com/cute/archive/2011/02/24/1963957.html 众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/l ...

随机推荐

  1. Sublime Text2 快捷键设置

    设置Tab两个空格: 点击 Preference -> Settings-User "tab_size":2, "translate_tabs_to_spaces& ...

  2. 程序员都会的 35 个 jQuery 小技巧

    收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 $(document).ready(function(){ $(document).bind("cont ...

  3. Pie--hdu1969(二分法)

    Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  4. 1021 Fibonacci Again (hdoj)

    Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) ...

  5. 【测试技术】ant中的for循环用法

    有的时候,我们希望ant中也能类似脚本语言一样进行for循环,以实现一些重复性工作.由于ant核心包并未提供此功能,所以需要下载一个扩展包扔到ant的lib目录下去.详细步骤如下: 1.下载核心包:a ...

  6. Linux操作系统安全(一)

         谈到Linux,大伙最先想到的是这是一个由全世界的优秀的黑客共同开发的一个开源操作系统,目前在服务器领域有着非常广的使用,同时,基于Linux操作系统而开发的Android系统也已经占据了移 ...

  7. 评价早期SaaS创业公司时,投资人在关注什么?(是否有机会发展成一个平台,长期的护城河)

    编者按: 当聊到早期项目时,人们经常会问投资人一个问题:“在评价早期 SaaS 创业公司时,投资人会关注什么——指标还是其他方面?” Nakul Mandan 作为 Lightspeed 风投机构的合 ...

  8. 如何把Python2的代码转换为Python3的代码

    如何把Python2的代码转换为Python3的代码 注: 如果对于python2和python3不熟悉的,可以参考: [整理]总结Python2(Python 2.x版本)和Python3(Pyth ...

  9. SQL表名,应该用复数还是单数

    用单数形式更佳,理由如下: 1.概念直观. 你有一个袋子,里面有好多个苹果,你会说这是个苹果袋.但无论里面有0,1,百万个苹果,它依然是个袋子.表也是如此,表明需要描述清楚,表里面包含的对象,而非有多 ...

  10. poj1163 dp入门

    The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36811   Accepted: 22048 De ...