Вопросы к защите лабораторной работы
- Контекст процесса
- Создание и запуск дочернего процесса.
- Способы передачи информации между процессами и их характерные особенности.
Пример выполнения задания
Задание:
№ вар. | Способ передачи массива в потомок и возврата результата | Параметры, передаваемые через команд. строку | Функция-потомок |
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!