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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2011, 16:41   #1
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию потоки в цикле

Здравствуйте!

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

Вот код:
Код:
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <queue>
#include <windows.h>
#include <process.h>
#include <time.h>
#include <stdlib.h>
#include <fstream>
using namespace std;

HANDLE hMutex;

typedef struct tagTDATA
{
	BYTE cPriority;
	DWORD dwClientId;
} TDATA, *PTDATA;

ostream &operator<<(ostream& output, const TDATA& d)
{
	output<<"Priority: "<<(int)d.cPriority<<"; "
		<<"ClientId: "<<d.dwClientId<<endl;
	return output;
}

class Cless
{
public:
	bool operator()(TDATA d1, TDATA d2)
	{
		return d1.cPriority > d2.cPriority;
	}
};

priority_queue<TDATA, vector<TDATA>, Cless > Q;

void clientThread(PVOID pvoid)
{
	WaitForSingleObject(hMutex, INFINITE);
	PTDATA ptdata;
	ptdata = (PTDATA)pvoid;

	for(int i = 0; i < 10; i++)
	{
	ptdata->cPriority = rand();
	ptdata->dwClientId = rand()%100;
	Q.push(*ptdata);
	}
	ReleaseMutex(hMutex);
}

void serverThread(PVOID pvoid)
{
	WaitForSingleObject(hMutex, INFINITE);

	PTDATA ptdata;
	ptdata = (PTDATA)pvoid;
	
	ofstream data("data.log", ios::out);
	if(!data)
	{
		cerr<<"Epic fail"<<endl;
		exit(1);
	}

	while(!Q.empty())
	{
		*ptdata = Q.top();
		data<<*ptdata<<endl;
		Q.pop();
	}
	ReleaseMutex(hMutex);
}

void main()
{	
	srand(time(NULL));
	
	TDATA tdata;

	for(int i = 0; i < 10; i++)
		_beginthread(clientThread, NULL, &tdata);
	
	_beginthread(serverThread, NULL, &tdata);
	system("pause");
}
В чем ошибка?
Всем заранее спасибо!
MasterSporta вне форума Ответить с цитированием
Старый 01.10.2011, 16:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
WaitForSingleObject(hMutex, INFINITE);
Я может слеп, но не вижу нигде инициализации мютекса...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2011, 17:07   #3
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию

ой... точно, совсем забыл про его инициализацию.
Теперь все заработало, большое спасибо!!
MasterSporta вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нюанс в цикле Superlotles Помощь студентам 9 18.10.2009 13:38
массив в цикле for mazak Общие вопросы C/C++ 6 07.09.2009 21:35
Ошибка в цикле Belokuraya Microsoft Office Excel 11 18.08.2009 15:52
Проблема в цикле Fekla Общие вопросы C/C++ 4 28.06.2009 12:50
Color в цикле Roof Общие вопросы Delphi 8 06.08.2008 15:07