c# - 如何在 TwinCAT 中设置 1 个隔离核心
问题描述
我必须在 TwinCAT 中从 ac# 代码中设置一个独立的内核。在线文档中显示了如何设置核心数量、基准时间、核心限制和延迟警告,但没有关于隔离核心的数量。
public void AssignCPUCores()
{
ITcSysManager3 systemManager = project.Object;
ITcSmTreeItem realtimeSettings = systemManager.LookupTreeItem("TIRS");
string xml = null;
MemoryStream stream = new MemoryStream();
StringWriter stringWriter = new StringWriter();
using (XmlWriter writer = XmlTextWriter.Create(stringWriter))
{
writer.WriteStartElement("TreeItem");
writer.WriteStartElement("RTimeSetDef");
writer.WriteElementString("MaxCPUs", "4"); // looking at what changes in TwinCAT by changing this number,
// I found out that this number is the number of shared cores
string affinityString = string.Format("#x{0}", ((ulong)CpuAffinity.MaskDual).ToString("x16"));
//the MaskDual/MaskQuad/MaskSingle defines how many boxes will be checked (i.e. how many cores will be used)
writer.WriteElementString("Affinity", affinityString);
writer.WriteStartElement("CPUs");
// WriteCpuProperties(writer, int coreId , int loadLimit, int baseTime, latencyWarning)
WriteCpuProperties(writer, 0, 90, 1000, 0);
writer.WriteEndElement(); // CPUs
writer.WriteEndElement(); // RTimeSetDef
writer.WriteEndElement(); // TreeItem
}
xml = stringWriter.ToString();
realtimeSettings.ConsumeXml(xml); //here modifies are applied
ITcSmTreeItem tasks = systemManager.LookupTreeItem("TIRT");
SetTaskProperties(tasks, CpuAffinity.CPU1);
}
似乎没有办法设置隔离核心。有没有可能?目标是获得这样的东西:
但是抛出 c# 代码,隔离核心的数量为 0,并且所有核心在括号之间都有(共享)。
解决方案
我不认为这是可能的。通常,当隔离核心的数量发生变化时,需要重新启动才能生效。如果您可以在不重新启动的情况下使用您的代码执行此操作,我会感到惊讶。
推荐阅读
- linux - 在 Redhat 中找到使用 java 1.6 的应用程序/路径
- typescript - 可以在打字稿中继承单例类吗?
- loopbackjs - 存储用于 Loopback 4 应用程序的临时变量
- android - 徽章通知未显示在我的选项卡布局中
- c# - 如何从数据库中的两个表中填充 ObservableCollection?
- python - 在 pandas 数据框中定义具有不同类型的列
- apache - 如何使用 Apache httpd 将请求从一个特定端口转发到另一个端口?
- android - 当用户杀死应用程序(牛轧糖)时,前台服务崩溃并重新启动
- django - django 中是否有可以提取文档字符串来创建文档的库?
- node.js - 节点 ejs forEach 导致“内容安全策略”错误