crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Lestat
  опции профиля:
сообщение 7.7.2008, 14:43
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 11.6.2008
Из: Москва
Пользователь №: 198

Спасибо сказали: 0 раз(а)




Репутация:   0  


Необходимо организовать довольно простой сервер на небольшое количество клиентов (около 10-20).
Решил сделать по потоку на клиента. Возникают вопросы...
Пишу класс в котором должен работать поток... сколько клиентов, столько и экземпляров этого класса в массиве, например, держать можно

Цитата
#pragma once
#include "include.hpp"

class ClientThread
{
public:
ClientThread(void);
~ClientThread(void);
private:
void Thread(void);
boost::thread *thrd;
};

Цитата
#include "ClientThread.h"

ClientThread::ClientThread(void)
{
thrd = new boost::thread(&Thread);
}
void ClientThread::Thread(void)
{
while(true) std::cout << "Я работаю..." << std::endl;
}
ClientThread::~ClientThread(void) { }


при компиляции вываливается error C2276: '&' : illegal operation on bound member function expression

Насколько понимаю проблема в том, что буст не знает адрес процедуры Thread
в строке thrd = new boost::thread(&Thread);

Не врубаюсь как обойти этот момент, помогите плз.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Lestat
  опции профиля:
сообщение 10.7.2008, 22:21
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 11.6.2008
Из: Москва
Пользователь №: 198

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо, Andrew Selivanov, пока трогать боюсь то, что работает, но позже разберусь и подправлю...

Дошел до работы с сетью. Вобщем в клиентском приложении получаю данные... читает, но все виснет... очень сильно нагружает систему

Читаю вот так:
Цитата
try
{
boost::signal1<void, std::string> getMessageSignal;
getMessageSignal.connect(&getData);

boost::asio::ip::tcp::iostream stream(host_name, "daytime");

for (;;)
{
std::string data;
std::getline(stream, data);
if(data.length() > 0) getMessageSignal(data);
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}

Я так думаю что виснет в результе того, что std::getline(stream, data); не ждет пока в сокете будет строка, а просто именно читает...
как обойти этот момент? можно ли его заставить именно ждать?
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 17.7.2025, 18:16