Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 22:05   #1
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию Объясните про события.

Код:
#include <windows.h>
#include <conio.h>
#include <iostream>

#define MAX_COUNT 10

char s_numbers[20][15] = 
{
	{"Один"}, {"Два"}, {"Три"}, {"Четыре"}, {"Пять"}, {"Шесть"}, {"Семь"}, {"Восемь"},
	{"Девять"}, {"Десять"} 
};

using namespace std;
PROCESS_INFORMATION CreateNewProcess(char* patch, char *commandline);
void Managment(char *patch); //определение работы
void PrintNumbers(int ProccessNumber); 

void main(int argc, char* argv[])
{
	setlocale(0,"RUS");
	if(argc == 2)
	{ 
		PrintNumbers( atoi( argv[1] ) ); 
	} 
	else 
		Managment(argv[0]); 
	return;
}

void Managment(char *patch)
{
	int activ = 0;
	HANDLE hCanWriteEvent = CreateEvent(NULL, FALSE, TRUE, "CanWriteProcess" );// свободное с автомат сбросом

	char buf[30];
	char ch ='x';
	PROCESS_INFORMATION mas[MAX_COUNT];
	HANDLE hCanClose[30];

	while( ch = _getch() )
	{
		if(ch == 'q') break;
		if(ch =='-') 
			if(activ)
			{ 
				WaitForSingleObject(hCanWriteEvent, INFINITE);
				SetEvent(hCanClose[activ]); 
				SetEvent(hCanWriteEvent);
				activ--;
			}
		if((ch == '+') && (activ < MAX_COUNT)) 
		{
			sprintf(buf," %d", ++activ);
			hCanClose[activ] = CreateEvent(NULL ,FALSE, FALSE, buf );
			mas[activ]=CreateNewProcess( patch, buf );
		}
		Sleep(200);
	}
	if(activ)
	{
		while(activ>0)
		{
			WaitForSingleObject(hCanWriteEvent,INFINITE);
			SetEvent(hCanClose[activ]); 
			SetEvent(hCanWriteEvent);
			activ--;
		}
	}
	system("pause");
}

PROCESS_INFORMATION CreateNewProcess(char* patch, char *commandline)
{
	STARTUPINFO cif;
	ZeroMemory(&cif,sizeof(STARTUPINFO)); 
	PROCESS_INFORMATION pi;
	if(CreateProcess(patch,commandline,NULL,NULL,TRUE,NULL,NULL,NULL,&cif,&pi)==FALSE) return pi;
	return pi;
}
void PrintNumbers(int num_proccess)
{
	HANDLE hCanWriteEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "CanWriteProcess" );
	char buf[30];
	sprintf(buf," %d",num_proccess);
	HANDLE hCanClose = OpenEvent(EVENT_ALL_ACCESS,FALSE,buf);

	while(1)
	{
		if(WaitForSingleObject(hCanWriteEvent,INFINITE)==WAIT_OBJECT_0) 
		{ 
			if(WaitForSingleObject(hCanClose,100)==WAIT_OBJECT_0)
			{
				SetEvent(hCanWriteEvent);
				return;
			}
			for(int i=0; i<strlen(s_numbers[num_proccess-1]); i++)
			{
				printf("%c",s_numbers[num_proccess-1][i]);
				Sleep(200);
			}
			printf(" \n| ");
			SetEvent(hCanWriteEvent); 
		}
	}
	return;
}

Разбираю программу одного человека.У него в данный момент спросить не моуг, так что не моли бы вы мне объяснить что у него делают события hCanWriteEvent, hCanClose.

Условие: Начальный процесс является управляющим. Он принимает поток ввода с клавиатуры и контролирует дочерние процессы. По нажатию клавиши ‘+’ добавляется новый процесс, ‘-’ – удаляется последний добавленный, ‘q’ – программа завершается. Каждый дочерний процесс посимвольно выводит на экран в вечном цикле свою уникальную строку. При этом операция вывода строки должна быть атомарной, т.е. процесс вывода должен быть синхронизирован таким образом, чтобы строки на экране не перемешивались.
alezha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните (про struct) devnal Общие вопросы C/C++ 10 30.01.2011 15:14
[Turbo Pascal] - задачи про подбрасывание монеты и про определение истины. Sent Tools Помощь студентам 10 28.10.2010 18:11
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Вопрос про события мыши? juan666777 Общие вопросы Delphi 6 17.07.2009 22:00
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24