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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2010, 16:53   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Вставка в дек потоками

Добрый вечер есть такая задача написать программу вставки в дек, в начала или конец, выбирать случайным образов, элементы брать из файла, все это использую потоки и критические секции. Вот написала:
Код:
/*
		формирование дека из файла
*/

#include "stdafx.h"
#include "iostream"
#include "windows.h"
#include "time.h"

CRITICAL_SECTION cs;

/*=============================================================================================================
													описание данных
==============================================================================================================*/
	const int n=10;	//количество элементов которые нужно вставить
	struct element		//элемент дека
	{
		int inf;
		element * next;
	};
	element *head;	//указатель на голову списка
	int ran[n];	//массив указаний мест вставки

	FILE *file;
	char* file_name = "input.txt";
	


DWORD WINAPI insert(void *data)	//процедура вставки (место вставки)
{	
	int *p_mesto = (int*)data;
	int mesto=*p_mesto;
	element *temp;
	EnterCriticalSection(&cs);
	
	if (head==NULL)
	{
		head=new element;
		head->inf=fgetc(file);
		head->next=NULL;
	}
	else
	{    
		switch(mesto)
        {
			case 0:	//вставка в голову
				{
					temp=head;
					head = new element;
					head->inf=fgetc(file);
					head->next=temp;
				}
			case 1:
				{	
					temp=head;
					while (temp->next!=NULL)
						temp=temp->next;
					element * new_elem;
					new_elem=new element;
					new_elem->inf=fgetc(file);
					new_elem->next=temp;
				}
		}
	}
	LeaveCriticalSection(&cs);
	return 0;
}


void print(element* first)	//процедура печати списка(начало)
{
	while(first!=NULL)
	{
		std::cout<<first->inf<<" ";
		first=first->next;
	}
}

void main()
{
/*=============================================================================================================
													инициализация
==============================================================================================================*/
	file = fopen(file_name,"r");	//открытие файла для чтения 

	for(int i=0;i<n;i++)
		ran[i]=(int)(rand()%2);
	
	for(int i=0;i<n;i++)
		std::cout<<ran[i];

	DWORD id[n];	//массив идентификаторов потоков
	HANDLE hThread[n];	//массив указателей потоков 
	InitializeCriticalSection(&cs);
	for (int j=0;j<n;j++)
	{
		hThread[j]=CreateThread(NULL,0,insert,&ran[j],0,&id[j]);
		if (hThread[j]==NULL)
		{	
			std::cout<<"Поток № не был создан"<<"error"<<GetLastError();	
		}
	} 

	WaitForMultipleObjects(n,hThread,true,INFINITE);	//ожидание завершения всех потоков

	print(head);
	fclose(file);
	getchar();
}
Выдает эксепшен о том что stream!=NULL, как исправить?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 24.03.2010, 17:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

stream в смысле фаловый поток?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2010, 17:04   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

да, программа работала нормально до тех пор пока не прикрутила файлы, в файле просто хранятся числа 1 2 3 4 5 и так далее
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками den49 Помощь студентам 0 06.10.2009 14:52
Очередь, стек, дек в Delphi Katen'ka Помощь студентам 1 12.06.2009 22:23
Работа с потоками Нюська Общие вопросы Delphi 3 27.05.2009 00:52
работа с потоками Alex_Pro Общие вопросы .NET 1 01.07.2008 07:25