あさまのブログ

SEをやってます。覚えたことなんかを書いていきます。

【.NET C#】動作するCPU(プロセッサー)を指定してアプリを起動させる。その2

前回の続きです。
maasasa.hatenablog.com


次は子プロセスを作成します。 現在のソリューションの状態、プロジェクトは前回作成した1つのみです。 f:id:maasasa:20170701011822p:plain

ソリューションエクスプローラーのソリューションを右クリックで表示されるメニューから、 追加 > 新しいプロジェクト > WPFアプリ を選びます。名前はProcessAとします。 同様の手順でProcessBプロジェクトも作成します。

こんな感じで3つのプロジェクトが作成できていると思います。
f:id:maasasa:20170701013917p:plain

下記コードです、ProcessAとBで名前空間などプロジェクト依存部分以外は共通です。
MainWindow.xaml

<Window x:Class="ProcessA.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ProcessA"
        mc:Ignorable="d"
        Title="MainWindow" Height="158.824" Width="325">
    <Grid>
        <Label Content="動作プロセッサ設定値は" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
        <Label Name="TargetProcessor" Content="x" HorizontalAlignment="Left" Margin="167,10,0,0" VerticalAlignment="Top" RenderTransformOrigin="2.695,0.538"/>
        <Label Content="です" HorizontalAlignment="Left" Margin="196,10,0,0" VerticalAlignment="Top" RenderTransformOrigin="2.695,0.538"/>
    </Grid>
</Window>

MainWindow.xaml.cs

using System.Diagnostics;
using System.Windows;

namespace ProcessA {
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
            this.Title = "ProcessA";
            //自身の動作CPUを取得する。
            var processor = Process.GetCurrentProcess().ProcessorAffinity.ToInt32();
            this.TargetProcessor.Content = processor.ToString();
        }
    }
}


ではソリューションをビルドしてアプリを起動します。 アプリが起動したらボタンを押下してProcessAとProcessBを起動します。 起動しました。指定したプロパティ値は効いてるようなのでタスクマネージャーで動作CPUを確認します。 f:id:maasasa:20170701014353p:plain

タスクマネージャーでアプリを選択して右クリックで表示されるメニューの「詳細の表示」をクリックします。 f:id:maasasa:20170701014532p:plain

詳細タブでアプリを選択して「関係の設定」を表示します。 f:id:maasasa:20170701014733p:plain

意図したCPUで動作していることが確認できました。 f:id:maasasa:20170701015045p:plain

C#は本当に使いやすいライブラリが用意されていると思います。
こんなに簡単に動作コアを指定できるとは思いませんでした!