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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2011, 00:08   #1
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию Очень нужно решение задачи Обедающих философов с использованием событий

Собственно, этим все сказанно. Пытался написать программку - ничего из этого не вышло. На всякий случай, прикреплю этот позор:

Код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>

HANDLE hEvent1, hEvent2, hEvent3, hEvent4, hEvent5;
HANDLE hThr1, hThr2, hThr3, hThr4, hThr5;
HANDLE h;
unsigned long uThrID1, uThrID2, uThrID3, uThrID4, uThrID5;

void Philosopher1 (void* pParams)
{
	while (1)
	{
		int i, timeeat;
		srand(time(NULL));
		WaitForSingleObject(hEvent1, INFINITE);
		WaitForSingleObject(hEvent2, 10);
		ResetEvent(hEvent1);
		ResetEvent(hEvent2);
		timeeat = rand()%15;
		cout << "First Philosopher: " << endl;
		for (i = 0; i<timeeat; i++)
			cout << "HOM-nom-NOM-";
		cout << endl << "Okay, I've finished. Let's think about 42...";
	}
	SetEvent(hEvent1);
	SetEvent(hEvent2);
}

void Philosopher2 (void* pParams)
{
	while (1)
	{
		int i, timeeat;
		srand(time(NULL));
		WaitForSingleObject(hEvent2, INFINITE);
		WaitForSingleObject(hEvent3, 10);
		ResetEvent(hEvent2);
		ResetEvent(hEvent3);
		timeeat = rand()%15;
		h=GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleTextAttribute(h,FOREGROUND_GREEN);
		cout << "Second Philosopher: " << endl;
		for (i = 0; i<timeeat; i++)
			cout << "HOM-nom-NOM-";
		cout << endl << "Okay, I've finished. Let's think about 42...";
	}
	SetEvent(hEvent2);
	SetEvent(hEvent3);
}

void Philosopher3 (void* pParams)
{
	while (1)
	{
		int i, timeeat;
		srand(time(NULL));
		WaitForSingleObject(hEvent3, INFINITE);
		WaitForSingleObject(hEvent4, 10);
		ResetEvent(hEvent3);
		ResetEvent(hEvent4);
		timeeat = rand()%15;
		h=GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleTextAttribute(h,FOREGROUND_RED);
		cout << "Third Philosopher: " << endl;
		for (i = 0; i<timeeat; i++)
			cout << "HOM-nom-NOM-";
		cout << endl << "Okay, I've finished. Let's think about 42...";
	}

	SetEvent(hEvent3);
	SetEvent(hEvent4);

}

void Philosopher4 (void* pParams)
{
	while (1)
	{
		int i, timeeat;
		srand(time(NULL));
		WaitForSingleObject(hEvent4, INFINITE);
		WaitForSingleObject(hEvent5, 10);
		ResetEvent(hEvent4);
		ResetEvent(hEvent5);
		timeeat = rand()%15;
		h=GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleTextAttribute(h,FOREGROUND_BLUE);
		cout << "Fourth Philosopher: " << endl;
		for (i = 0; i<timeeat; i++)
			cout << "HOM-nom-NOM-";
		cout << endl <<"Okay, I've finished. Why the hell am I blue?";
	}
	SetEvent(hEvent4);
	SetEvent(hEvent5);

}

void Philosopher5 (void* pParams)
{
	while (1)
	{
		int i, timeeat;
		srand(time(NULL));
		WaitForSingleObject(hEvent5, INFINITE);
		WaitForSingleObject(hEvent1, INFINITE);
		ResetEvent(hEvent5);
		ResetEvent(hEvent1);
		timeeat = rand()%15;
		h=GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleTextAttribute(h,FOREGROUND_RED|FOREGROUND_INTENSITY);
		cout << "Fifth Philosopher: " << endl;
		for (i = 0; i<timeeat; i++)
			cout << "HOM-nom-NOM-";
		cout << endl <<"Okay, I've finished. And I hate my color too.";
	}
	SetEvent(hEvent5);
	SetEvent(hEvent1);

}


int main(void)
{
	hEvent1 = CreateEvent (NULL, TRUE, TRUE, NULL);
	hEvent2 = CreateEvent (NULL, TRUE, TRUE, NULL);
	hEvent3 = CreateEvent (NULL, TRUE, TRUE, NULL);
	hEvent4 = CreateEvent (NULL, TRUE, TRUE, NULL);
	hEvent5 = CreateEvent (NULL, TRUE, TRUE, NULL);

	hThr1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher1, NULL,
		0,&uThrID1);
	hThr2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher2, NULL,
		0,&uThrID2);
	hThr3 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher3, NULL,
		0,&uThrID3);
	hThr4 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher4, NULL,
		0,&uThrID4);
	hThr5 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher5, NULL,
		0,&uThrID5);

	return 0;
}
Очень нужна помощь.
RAZOR1703 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите пожалуйста очень нужно решение задачки Satenka Microsoft Office Excel 4 28.05.2014 21:57
Про обедающих философов Авторитет C# (си шарп) 0 29.09.2011 11:36
задачи Lazarus, очень нужно решение аня111 Помощь студентам 3 16.09.2011 20:39
Решение задачи с использованием функции ЕСЛИ Alhorene Microsoft Office Excel 6 30.04.2011 08:06
Очень нужно решение и блоксхема. simplex Паскаль, Turbo Pascal, PascalABC.NET 2 20.11.2008 18:24