Программа запускает поток с помощью системной функции 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). В случае непрямой или косвенной адресации информация помещается в некоторый промежуточный объект, например, в почтовый ящик;
· используемая модель передачи данных - потоковая или модель сообщений (см. ниже);
· объем передаваемой информации;
· синхронность обмена данными. Если отправитель сообщения блокируется до получения этого сообщения адресатом, то обмен считается синхронным, в противном случае - асинхронным.
Кроме перечисленных у каждой связи есть еще ряд особенностей.