![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Lestat |
![]() ![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 11.6.2008 Из: Москва Пользователь №: 198 Спасибо сказали: 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 |
![]()
Сообщение
#2
|
![]() Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 11.6.2008 Из: Москва Пользователь №: 198 Спасибо сказали: 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); не ждет пока в сокете будет строка, а просто именно читает... как обойти этот момент? можно ли его заставить именно ждать? Спасибо! |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 17.7.2025, 18:16 |