Вопросы к защите лабораторной работы



  1. Контекст процесса
  2. Создание и запуск дочернего процесса.
  3. Способы передачи информации между процессами и их характерные особенности.

Пример выполнения задания

Задание:

№ вар. Способ передачи массива в потомок и возврата результата Параметры, передаваемые через команд. строку Функция-потомок
0 Файл отображения а,b Подсчитать количество элементов массива, находящихся в заданном диапазоне[a,b].

Текст программы-родителя на С#:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.IO;

using System.Diagnostics;//!!!!!!!!!!!!!!!!!!!!!!

using System.IO.MemoryMappedFiles;//!!!!!!!!!!!!!!!!!!!!!

 

namespace spo2

{

publicpartialclassForm1 : Form

{

int[] x;

int result;

 

public Form1()

   {

InitializeComponent();

   }

 

privatevoid button1_Click(object sender, EventArgs e)

   {// формированиемассива

string[] s = textBox1.Text.Split(' ');

if (s[0] != "")

           x = newint[s.Length];

 

else { MessageBox.Show("Введитеэлементымассива"); return; }

int i = 0;

foreach (string current in s)

if (int.TryParse(current, out x[i++]) == false)

{ MessageBox.Show("ошибкавводаэлементов"); return; }

 

Process child = newProcess();

using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 10000))

       {

using (MemoryMappedViewStream stream = mmf.CreateViewStream())

       {BinaryWriter sr = newBinaryWriter(stream);

sr.Write(x.Length);

foreach (int current in x)

sr.Write(current);

 

       }

 

////////////////////////////// запускпотомка

               child.StartInfo.Arguments = textBox_ot.Text+" "+textBox_do.Text.ToString();

 

               child.StartInfo.FileName = @"E:\ProjectC#\спо_веснаС#\файлотображения\spo2_child_filemapping\bin\Debug\spo2_child.exe";

if (child.Start() == false)

MessageBox.Show("неудалосьзапуститьпроцесс");

else

               {

child.WaitForExit();

using (MemoryMappedViewStream stream = mmf.CreateViewStream())

                   {

BinaryReader reader = newBinaryReader(stream);

result = reader.ReadInt32();

                   }

MessageBox.Show("результат: " + result);

}

       }

   }

}

}

Текст программы-потомка:

usingSystem;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Diagnostics;

using System.IO.MemoryMappedFiles;

usingSystem.IO;

// подсчет количества элементов в диапазоне

namespace spo2_child

{

publicpartialclassForm1 : Form

{

int arg1, arg2 = 0;

int[] x;

int count_between;

MemoryMappedFile mmf;

BinaryReader sr;

BinaryWriterbw;

public Form1(string[] args)

   {

InitializeComponent();

if (args.Length <2) MessageBox.Show("Недостаточнопараметров");

else

       {

bool bres = Int32.TryParse(args[0], out arg1);

if (bres == false) MessageBox.Show("Ошибкапараметра 1");

else bres = Int32.TryParse(args[1], out arg2);

if (bres == false) MessageBox.Show("Ошибкапараметра 2");

 

       }

   }

 

privatevoid Form1_Load(object sender, EventArgs e)

   {

string s = "";

       count_between = 0;

MessageBox.Show("sss");

mmf = MemoryMappedFile.OpenExisting("testmap");

MessageBox.Show("zzz");

using (MemoryMappedViewStream stream = mmf.CreateViewStream())

           {

sr = newBinaryReader(stream);

int count = sr.ReadInt32();

x = newint[count];

 

for (int i = 0; i < count; i++)

               {

x[i] = sr.ReadInt32();

                   s = s + x[i].ToString() + ' ';

if (x[i] > arg1 && x[i] < arg2) count_between++;

               }

sr.Close();

 

               textBox1.Text = arg1.ToString();

               textBox2.Text = arg2.ToString();

               textBox3.Text = s;

               textBox4.Text = count_between.ToString();

           }

   }

 

privatevoid button1_Click(object sender, EventArgs e)

   {

using (MemoryMappedViewStream stream = mmf.CreateViewStream())

       {

bw = newBinaryWriter(stream);

bw.Write(count_between);

bw.Close();

       }

       Close();  

   }

}

}

Результаты работы программы:

 


Дата добавления: 2018-04-05; просмотров: 378; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!