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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2011, 14:24   #11
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

QuadroX

Что-то типа такого. Можешь выдать преподу за свою :D

Код:
#include <string>
#include <queue>

#include <locale>
#include <iostream>
#include <fstream>

#include <boost/thread.hpp>

#include <atlbase.h>

const CHandle hExit(CreateEvent(nullptr, FALSE, FALSE, NULL));
const CHandle hPing(CreateEvent(nullptr, FALSE, FALSE, NULL));

typedef std::queue<std::string> Q;
Q q;

boost::mutex m;
size_t counter = 0;

void Reader(const std::string& fileName)
{
	std::ifstream ifs(fileName);

	std::string s;
	while (std::getline(ifs, s))
	{
		{
			const boost::mutex::scoped_lock l(m);
			q.push(s);
		}

		PulseEvent(hPing);
	}

	SetEvent(hExit);
}

void Counter()
{
	const HANDLE h[] = { hPing, hExit };

	while (1)
	{
		enum { Event_Ping = WAIT_OBJECT_0, Event_Exit };

		DWORD err = WaitForMultipleObjects(_countof(h), h, FALSE, INFINITE);
		if (err == Event_Exit)
			return;

		Q tmp;
		{
			const boost::mutex::scoped_lock l(m);
			tmp.swap(q);
		}

		do
		{
			for ( ; tmp.size(); tmp.pop())
			{
				const std::string s = tmp.front();
				if (s.find("строка для поиска") != std::string::npos)
					counter++;
			}

			const boost::mutex::scoped_lock l(m);
			tmp.swap(q);
		} while (tmp.size());
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "");

	boost::thread_group g;

	g.create_thread(boost::bind(&Reader, "file.txt"));
	g.create_thread(&Counter);

	g.join_all();

	std::cout << "Counter: " << counter << std::endl;

	return 0;
}
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с потоками session Общие вопросы C/C++ 6 21.06.2010 17:13
Работа с потоками Яр|/||< (^_^) Общие вопросы Delphi 5 09.03.2010 08:23
Работа с потоками den49 Помощь студентам 0 06.10.2009 14:52
Работа с потоками Нюська Общие вопросы Delphi 3 27.05.2009 00:52
C++, работа с потоками mat90x Помощь студентам 20 15.05.2008 22:20