Программа запускает поток с помощью системной функции CreateThread и передает ему параметр из переменной ThreadParameter.

В качестве потока запускается подпрограмма MyThread.

Практическая часть

//Практическое занятие № 24

//Группа xxxxxx Терминал N ФИО

#include "stdafx.h"

#include "windows.h" // win32 API

#include <locale.h> // подключение Русского языка

#include <iostream> // инструкции c++ std,cout,cin …

using namespace std; // пространство стандартных имен */

DWORD WINAPI MyThread( LPVOID lpParam ) { //Поток MyThread

cout << "Parameter = " << *(DWORD*)lpParam << endl;

return 0;

}

VOID main( ) {

DWORD ThreadId, ThreadParameter = 10;

HANDLE hThread;

hThread = CreateThread( //Создание потока MyThread

NULL, // атрибуты безопасности по умолчанию

Размер стека по умолчанию

MyThread , // указатель на процедуру создаваемого потока

&ThreadParameter, // аргумент, передаваемый функции потока

Флаги создания по умолчанию

&ThreadId); // возвращаемый идентификатор потока

if (hThread == NULL) cout << "CreateThread failed." << endl;

getchar();

cout << "ThreadId="<<ThreadId<< endl;

CloseHandle( hThread );

}

/* При выполнении данной практической работы я освоил

*/

Практическое занятие №25

1. Краткие теоретические сведения :

Программа запускает два потока . Первый поток First Thread запускается главной программой main, второй поток SecondThread запускается системной функцией CreateThread. Оба потока выполняют подпрограмму длинного счета Calculations(). У потока SecondThread меняется приоритет с помощью системной функции SetThreadPriority и констант THREAD_PRIORITY_ABOVE_NORMAL (увеличить приоритет на единицу) или THREAD_PRIORITY_LOWEST (понизить приоритет на 2 единицы). В зависимости от приоритета поток SecondThread должен заканчиваться раньше или позже чем First Thread . В программе также использованы системные функции SuspendThread и ResumeThread для останова и запуска процесса SecondThread.

Практическая часть

//Практическое занятие № 25

//Группа xxxxxx Терминал N ФИО

#include "stdafx.h"

#include "windows.h" // win32 API

#include <locale.h> // подключение Русского языка

#include <iostream> // инструкции c++ std,cout,cin …

using namespace std; // пространство стандартных имен */

//Подпрограмма длинного счета

void Calculations() {

int i,N=50000000;

double a,b;

for ( i = 0; i<N; i++) {

b=(double)i / (double)N;

a=sin(b); }

}

//Поток SecondThread

DWORD WINAPI SecondThread( LPVOID lpParam ) {

cout<<endl<<"Begin of Second Thread"<<endl;

Calculations();//Длинный расчет

cout<<"End of Second Thread"<<endl;

return 0;

}

VOID main() {

DWORD dwThreadId, dwThrdParam=0;

HANDLE hThread;

hThread = CreateThread( //Создание потока SecondThread

NULL,

0,

SecondThread,

&dwThrdParam,

0,

&dwThreadId);

if (hThread == NULL)

{

cout<<"CreateThread failed" <<endl;

return;

}

//Повышение или понижение приоритета потока

SetThreadPriority(hThread, THREAD_PRIORITY_ABOVE_NORMAL);

//SetThreadPriority(hThread, THREAD_PRIORITY_LOWEST);

SuspendThread(hThread); //Останов потока

cout<<"Get some symbol"<<endl;

getchar();

ResumeThread(hThread); //Запуск потока

cout<<"Begin of First Thread "<<endl;

Calculations(); //длинный расчет

cout<<"End of First Thread"<<endl;

getchar();

}

/* При выполнении данной практической работы я освоил

*/

Лекция 11. Межпроцессный обмен

К основным способам межпроцессного обмена традиционно относят каналы и разделяемую память.

Введение

Из курса ОС известно, что для выполнения таких задач, как совместное использование данных, построение интегрированных многофункциональных приложений и т.д., различным процессам (а также различным потокам) необходимо взаимодействовать между собой. Поскольку процессы изначально задумывались как обособленные сущности, для обеспечения корректного взаимодействия процессов требуются специальные средства и действия операционной системы.

В основе межпроцессного (Inter Process Communications, IPC) обмена обычно находится разделяемый ресурс (например, канал или сегмент разделяемой памяти). Обычно такой ресурс может быть доступен всем процессам, которые знают его имя и имеют необходимые привилегии.

Кроме того, организация связи между процессами всегда предполагает установления таких ее характеристик, как:

· направление связи. Связь бывает однонаправленная (симплексная) и двунаправленная (полудуплексная для поочередной передачи информации и дуплексная с возможностью одновременной передачи данных в разных направлениях);

· тип адресации. В случае прямой адресации информация посылается непосредственно получателю, например, процессу P-Send (P, message). В случае непрямой или косвенной адресации информация помещается в некоторый промежуточный объект, например, в почтовый ящик;

· используемая модель передачи данных - потоковая или модель сообщений (см. ниже);

· объем передаваемой информации;

· синхронность обмена данными. Если отправитель сообщения блокируется до получения этого сообщения адресатом, то обмен считается синхронным, в противном случае - асинхронным.

Кроме перечисленных у каждой связи есть еще ряд особенностей.

Наши рекомендации