powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программирование работы сервера с множеством клиентов
25 сообщений из 123, страница 2 из 5
Программирование работы сервера с множеством клиентов
    #33100825
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redskin Любая технология - это средство, инструмент, а не самоцель. Если разработчик владеет ООП, он сам накрутит классов вокруг сокетов (или использует готовые решения такого типа), если нет, реализует на чистом socket api и тоже будет счастлив...


Замечательная фраза ;) На ней можно закончить этот флейм...
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100829
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторНу как программист вы хорошо понимаете что возможность мультипарадигмной разработки - это минус для не очень опытного разработчика, так как позволяет слишком много напартачить и большой плюс и дополнительная гибкость для специалиста :).
Все верно. Однако и очень-очень-очень опытному напортачить будет проще :)
Вон пример перед глазами - AndreiNz. Вроде местами он и прав, но руки за такие решения отрывать надо по самые плечи.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100835
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВсе верно. Однако и очень-очень-очень опытному напортачить будет проще :)Вон пример перед глазами - AndreiNz. Вроде местами он и прав, но руки за такие решения отрывать надо по самые плечи.

AndreiNz больше похож на аналиста, теоретика программирования или преподавателя, но не на программиста практика.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100844
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор, вы хоть представляете, что такое фабрика класса? Это design pattern причем creation pattern. Какая разница, как я создаю объект в простом примере. Фабрика класса только бы усложнила бы этот пример.

Вот где действительно легко наворочить дров, так это воплащая design patterns. Я как раз сейчас работаю в фирме, котора в свое время увлекалась этим делом. Окончилось это тем, что большая часть этих pattern-ов была убранна, потому что жрет очень много ресурсов. Но и сейчас в коде довольно часто встречаются singleton-ны и всякие там observer-ры
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33101252
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzИнтегратор, вы хоть представляете, что такое фабрика класса? Это design pattern причем creation pattern. Какая разница, как я создаю объект в простом примере. Фабрика класса только бы усложнила бы этот пример.

Вот где действительно легко наворочить дров, так это воплащая design patterns. Я как раз сейчас работаю в фирме, котора в свое время увлекалась этим делом. Окончилось это тем, что большая часть этих pattern-ов была убранна, потому что жрет очень много ресурсов. Но и сейчас в коде довольно часто встречаются singleton-ны и всякие там observer-ры

Ну если тупо пихать паттерны везде где можно, как например вы делаете с ООП, то последствия неcложно предугадать Что фирма то производит - очень хочется знать с какой продукцией ни в коем случае нельзя связываться ?

А вот чем вас не устраивает такой код как альтенатива вашему я совсем не понимаю :)
Код: plaintext
1.
2.
 
   shared_ptr<Thread> theThread = ThreadsFactoryHolder::Instance()->create();


PS Честно говоря я бы потоки вообще не в heap-е создавал - посмотрите например как это делаетсчя во всех нормальных либах (тот же boost, ZThreads, wxWindows) :) - но раз уж так вас хочется ...
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33101834
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПрошу прощения, но я сказал "мешанина технологий"
Прошу прощения, очепятка вышла, действительно, надо хотя бы свои посты внимательнее читать :)

А вобще - чем меньше свободы предоставляет компилятор, тем хуже программисту. А если кому-то не нравится, что что-то есть еще кроме того, что ему нужно и интересно - то никто не заставляет его использовать это в своих проектах.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33104561
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если как альтернатива моему примеру, то абсолютно ни чем не устраивает. Вы наверное полагаете, что фабрика класса сама будет создавать объекты и никакой начинки в ней писать не надо.

Если же серьезно, то внутри метода create() того объекта указатель на который вернет статическая функция Instance() все сведется к тем же #ifdef-ам. Только пример это не сделает более понятным. Вам придется объяснять как работает class factory и приводить текст функции create() как минимум.
А теперь давайте задавать вопросы.

Q: Сократит ли наличие фабрики класса колличество кода, которы надо писать, понимать и поддерживаь?
A: Нет, скорее увеличит.

Q: Улучшит ли наличие фабрики класса повторное использование кода (code reuse)?
A: Ненамного, вы будете создавать thread , по большому счету в двух местах. 1. вы создадите слушающую thread. 2. Вы будете создавать новую thread на каждое новое соединение, но будете делать это в одном и том же месте.

Q: Увеличит ли это эффективность программы?
A: Уменьшит, но не существенно.

Q: Что же тогда улучшит наличие фабрики класса?
A: Элегантность программы.

Q: А на хрена козе баян?

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

Теперь о том, что делает фирма. Она много чего делает. В частности она делает так называемый такую программу. Когда у вас гаснет электричество, вы начинаете звонить тому, кто вам это электричество поставляет. Так вот наш софт позволяет отсортировать огромную массу звонков и пропустить операторам, только те, которые действительно несут полезную информацию. Другой продукт позволяет отслеживать и передавать по радио и каналам мобильной телефонной связи задания на и текущее состояние аванийных и плановых работ в электроэнергетике. Третий позволяет отслеживать местонахождение местонахождение транспортных средст и собирать с них дополнительную информацию(скорость, температуры и тд.).
Компания продает свои продукты в основном в США, Канаду, Австралию, Новую Зеландию. Российских клиентов у нас нет и за рубли мы не торгуем. Более того я, наверное, единственный человек в компании, кто знает, что такое рубль.

Так что, если решите покупать продукцию нашей фирмы, подумайте, может вам стоит купить небольшую электростанцию или всю американскую береговую охрану для начала.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33104604
Кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreiNz
Инкапсуляция не даст вам того уровня абстракции, который даст полиморфизм.

Можно ссылочку на первоисточник этой глубой мысли?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33104835
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых создавать потоки на С++ предложенным вами методом и который я повторил в более адекватной форме - бред. Ещё раз - смотрите хорошие либы - там всё сделано правильно :)

AndreiNz

Если же серьезно, то внутри метода create() того объекта указатель на который вернет статическая функция Instance() все сведется к тем же #ifdef-ам. Только пример это не сделает более понятным.


Сделает. Всё зашито в фабрику - как она делает - неважно для клиентского кода. ifdef-ы что в С что в С++ зашиваются в код библиотеки, то позволяет сделать клиентский код абсолютно прозрачным. В клиентском кодже нет ни упоминания что он адаптируется под ту или иную ОС - за это отвечает используемая либа. Это принципиальный момент - так как вы утверждали что ООп позволяет сделать код в случае кроссплатформы проще. ООП здесь непричём совершенно.


Q: Сократит ли наличие фабрики класса колличество кода, которы надо писать, понимать и поддерживаь?
A: Нет, скорее увеличит.

Да - я задействую стандартную фабрику либо напишу обобщённую сам. Если вы не знаете как это сделать - учите матчасть :)


Q: Улучшит ли наличие фабрики класса повторное использование кода (code reuse)?

Я с вас просто балдею - честное слово. То вы кричите пихайте ООП везде где можно, а то утверждаете что Design Patterns - это зло... Видите ли DP - это не панацея и не магические приёмы которые надо либо использовать либо нет... Если вы дейтсвительно хорошо разбираетесь в ООП и пишете много кода, то у вас эти програмные элементы будут появляться сами собой незвисимо от того прочитади ли вы GoF или нет. Так как паттерны - это прото некоторые хорошо зарекомендовавшиее себя для решения определённых задач программные приёмы, не трюки - а именно приёмы. По крайне мере когда я читал GoF в своё время многие вещи показались очень знакомыми и близкими к реальной практике. Раз вы говорите что то непонятно про эффективность (кстати так и не расшифровав о чём вы говорите), то аподозреваю что вы вообще слабо понимаете что такое паттерны ... По крайней мере утверждение: не пользуйтесь стандартными приёмами звучит довольно странно и дико ...


Q: Увеличит ли это эффективность программы?


ООП вообще почти всегда уменьшает эффективность программы - тогда зачем вы им пользуейтесь вообще ? Вы начинаете противоречить сами себе. То ура ООП - а то давайте писать проще. Вы уж определитесь чего вы хотите пожалуста.


A: Уменьшит, но не существенно.


Возможно что вообще никак не изменит если код будет встраиваемым :).


A: Элегантность программы.

cv. выше.



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

Пример отвратительный так как предназначался для примера хорошего решения здачи, поставленной автором топика, при этом приведённое решение не выдерживает ни малейшей критики.


реклама поскипана...


Более того я, наверное, единственный человек в компании, кто знает, что такое рубль.

Так что, если решите покупать продукцию нашей фирмы, подумайте, может вам стоит купить небольшую электростанцию или всю американскую береговую охрану для начала.

PS Оффтоп. Лучше бы показывали вашу компетентность качественными примерами кода и объяснениями а не громкими абстракными заявления ;)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33104972
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzЗемлекоп,

Я, наверное, не совсем понятно объяснил. Вы декларируете абстрактный объект и манипулируете им. А создаете конкретный, зависящий от платфлормы.
Тоесть если вы хотите передать свой объект функции, то вы передаете указатель на CThreadInterface. Например:

void DoSomething( CThreadInterface *pThread){
pThread->Resume();
}


А каким образом будет реализовано тело самого витка? Где оно будет объявлено?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105226
prof79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗемлекопА каким образом будет реализовано тело самого витка? Где оно будет объявлено?
Реализация для Unix будет зашита в классе CThreadUnix
Реализация для винды - в CThreadWindows.
Далее допустим через год Вас напряглим портировать эту систему на MacOS.
Вместо того чтобы ковыряться в исходном коде вы должны будете
а) создать новый класс (CMacOSThread)- поток от CThreadInterface и в нем реализовать логику работы.
б) в одном месте - при создании обьекта (неважно используют фабрику класов или нет - все равно ГДЕТО #ifdef делать придется - программа под Unix попросту не скомпилится с #include<windows.h>) написать
#ifdef _MACOS
pThread = new CMacOSThread;
#endif

И все. Больше ничего(в идеале) трогать не потребуется. Вот вам и преимущества полморфизма над инкапсуляцией если хотите так понимать :-) .
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105242
Кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prof79Реализация для Unix будет зашита в классе CThreadUnix
Реализация для винды - в CThreadWindows.


Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105273
prof79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кодер
Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое?
Значит "почти независящее" вынести в отдельную(ые) ф-цию-член CThreadInterface и вызывать ее по месту требования.
А "зависящее" - раскидать по наследникам.
ЗЫ не принимайте это как совет к действию. Скорее это иллюстрация технологии. Не видя задачи целиком сложно говорить, стОит ли применять эту технологию или легче обойтись чистым С.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105330
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prof79 Кодер
Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое?
Значит "почти независящее" вынести в отдельную(ые) ф-цию-член CThreadInterface и вызывать ее по месту требования.
А "зависящее" - раскидать по наследникам.
ЗЫ не принимайте это как совет к действию. Скорее это иллюстрация технологии. Не видя задачи целиком сложно говорить, стОит ли применять эту технологию или легче обойтись чистым С.

Это "технология" ничего объектно-ориентированного в себе не содержит
Чем это отличается от следующего пример ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  #ifdef _UNIX
     beginUnixThread(&threadProc);
  #endif

  #ifdef _WIN32
     beginWinThread(&threadProc);
  #endif

Для меня это суть одно и тоже :)

Хотя ещё раз отмечу - так НЕ пишут в нормальных проектах. Всё зашивается в библиотечные вызовы, разруливающие все проблемы кроссплатформенности внутри себя.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105370
Кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prof79 Кодер
Странный подход. А если логика самого витка почти не зависит от платформы, то для чего плодить повторяющийся код. Это что же за ООП такое?
Значит "почти независящее" вынести в отдельную(ые) ф-цию-член CThreadInterface и вызывать ее по месту требования.
А "зависящее" - раскидать по наследникам.
ЗЫ не принимайте это как совет к действию. Скорее это иллюстрация технологии. Не видя задачи целиком сложно говорить, стОит ли применять эту технологию или легче обойтись чистым С.

prof79, вы когда-нибудь витки использовали? Речь идет о методе типа Run в CWinThread в Windows или run() в QThread в Qt. Другими словами я должен иметь некий класс, от которого я могу породить свой собственный реализовав тело витка, которое не будет зависеть от платформы.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105373
Кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИнтеграторХотя ещё раз отмечу - так НЕ пишут в нормальных проектах. Всё зашивается в библиотечные вызовы, разруливающие все проблемы кроссплатформенности внутри себя.

Подпишусь под каждым словом.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105413
prof79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИнтеграторЭто "технология" ничего объектно-ориентированного в себе не содержит
Чем это отличается от следующего пример ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  #ifdef _UNIX
     beginUnixThread(&threadProc);
  #endif

  #ifdef _WIN32
     beginWinThread(&threadProc);
  #endif

Для меня это суть одно и тоже :)


Эта технология содержит в себе главное "обьектное" - виртуальные ф-ции. И как следствие устраняется необходимость в case-ах(в данном случае - ifdef) во всех местах кроме создания обьекта. На минутку представьте себе: допустим над потоками можно производить операции:
а) начинать (begin)
б) прекращать(stop)
в) изменять приоритет(set_prior)
г) приостанавливать(pause)
д) возобновлять (resume).
Добавьте при желании операции по вкусу. Все операции закодированы в разных местах программы (библиотеки).
В вашем случае это будет выглядеть приблизительно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
  #ifdef _UNIX
     beginUnixThread(&threadProc);
  #endif
  #ifdef _WIN32
     beginWinThread(&threadProc);
  #endif

  #ifdef _UNIX
     stopUnixThread(&threadProc);
  #endif
  #ifdef _WIN32
     stopWinThread(&threadProc);
  #endif

  #ifdef _UNIX
     set_priorUnixThread(&threadProc, prior);
  #endif
  #ifdef _WIN32
     set_priorWinThread(&threadProc, prior);
  #endif

  #ifdef _UNIX
     pauseUnixThread(&threadProc);
  #endif
  #ifdef _WIN32
     pauseWinThread(&threadProc);
  #endif

  #ifdef _UNIX
     resumeUnixThread(&threadProc);
  #endif
  #ifdef _WIN32
     resumeWinThread(&threadProc);
  #endif
Еще раз повторю: все это разнесено по разным модулям и может неоднократно повторяться. При портировании библиотеки под допустим MacOS будет необходимо облазить все модули и в КАЖДОМ случае добавить
Код: plaintext
1.
2.
#ifdef MacOS
....
В моем варианте. все это будет выглядеть приблизительно так:
В одном месте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  CThreadInterface *t;
  #ifdef _UNIX
     t=new CThreadWindows;
  #endif
  #ifdef _WIN32
     t=new CThreadUnix;
  #endif
ВО всех остальных местах:
Код: plaintext
1.
2.
3.
4.
5.
  t->Start();
  t->Stop();
  t->SetPrior(proir);
  t->Pause();
  t->Resume();
При портировании под MacOS не потребуется всего-ничего написать новый класс и В ОДНОМ МЕСТЕ добавить #ifdef _MacOS t= new CMacOSThread

Нашли 10 отличий? Или по прежнему одно и тоже ?

Интегратор
Хотя ещё раз отмечу - так НЕ пишут в нормальных проектах. Всё зашивается в библиотечные вызовы, разруливающие все проблемы кроссплатформенности внутри себя.
А библиотекам как разруливать внутри себя?
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105744
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prof79А библиотекам как разруливать внутри себя?

Вариант номер 1

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#ifdef _UNIX
   #define beginThread befinUnixThread
   #define acquireLock acquireLockUnix
...
#ifdef _WIN32
   #define beginThread begnWinThread
   #define acquireLock acquireLockWin
...
#endif

Вариант 2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
typedef struct tagGenericApi {
   PFN1 beginThread; 
   PFN2 acquireLock; 
...
} GenericApi;

void loadWinApi(GenericApi* api) {
  api->beginThread = &BeginWinThread;
  api->acquireLock = &acquireLockWin;
}

void loadUnixApi(GenericApi* api) {
  api->beginThread = &BeginUnixThread;
  api->acquireLock =  &acquireLockUnix;
}

void loadApi(GenericApi* api) {
#ifdef _UNIX
   loadUnixApi(api);
#ifdef _WIN32
   loadWinApi(api);
#endif
}


ну вот хотя бы так....
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105760
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prof79
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  #ifdef _UNIX
     beginUnixThread(&threadProc);
  #endif

  #ifdef _WIN32
     beginWinThread(&threadProc);
  #endif

Эта технология содержит в себе главное "обьектное" - виртуальные ф-ции. И как следствие устраняется необходимость в case-ах(в данном случае - ifdef) во всех местах кроме создания обьекта.
Эта, а что мешает титанам ООП-мысли вынести всю условную компиляцию из кода в скрипты сборки? Достаточно сделать один единственный класс CThread. И повторить его в разных исходниках, исходник win32\CThread.cpp, linux\CThread.cpp, bsd\CThread.cpp, mac\CThread.cpp и так далее.... Если есть сильное желание можно сделать им всем общего родителя CAbstractThread или аналогичный интерфейс, но не обязательно. Нафига делать выбор между платформенными реализациями внутри кода??? Вы б еще в рантайме выбирали какой именно класс создавать :)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105782
Кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот кусок кода для .h файла

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#ifdef POSIX
#   include <pthread.h>
    typedef pthread_t THREAD;
    typedef void *THREAD_FUNC;
#   define THREAD_CREATE(tp,fp,ap) (pthread_create((tp),NULL,(fp),(ap)) ? FALSE : TRUE)
#   define THREAD_JOIN(tp)         pthread_join(tp)
#   define THREAD_SELF()           pthread_self()
#   define THREAD_EXIT(sp)         pthread_exit((sp))
#   define THREAD_ERRNO            (errno)

#elif defined WIN32

#   define THREAD_CREATE(tp,fp,ap) \
((*(tp) = (THREAD) _beginthread((fp), 0 ,(void*)(ap))) == (THREAD) - 1  ? FALSE : TRUE)
#   define THREAD_JOIN(tp)         WaitForSingleObject(*(tp), INFINITE)
#   define THREAD_SELF()           GetCurrentThreadId()
#   define THREAD_EXIT(sp)         _endthread()
#   define THREAD_ERRNO           WSAGetLastError()
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33105804
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot White Owl Нафига делать выбор между платформенными реализациями внутри кода??? [/quot]

:) ну можно ещё с инклудами поиграться

Кстати как вариант номер 3 если разрабатываете с нуля всю либу - делаете в обоих либах одинаковые функции и линкуете к проекту либу для той ОС под которую собираете проект :)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33106177
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодец, AndreiNz !
Так их, так их, ретроградов-приверженцев убогого базового подмножества великого языка С++-са.
Только я бы вам посоветовал открыть новую тему для дальнейшего развития этой идеи.

Да, и еще - про ассемблер ты маленько загнул. Средний современный компилятор, как принято считать, уже давно генерирует код, лучщий по качеству ручного ассемблерного. Так что если и есть вставки - это скорее дань традиции, непереписанные куски.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33106183
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
вы просто либо не все прочитали, либо не понимаете суть проблемы. Если есть умные мысли, то примеры кода в студию.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33106356
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМолодец, AndreiNz !
Так их, так их, ретроградов-приверженцев убогого базового подмножества великого языка С++-са.

Посмотрите пожалуйста топик - пока большинство утверждений про ООП от AndreiNz было некорректно, а приводимые примеры кода просто удивляли :)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33109582
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор,

А Вам не приходило в голову, что ваш вариант 2 как раз является попыткой воплотить в С то, что я предложил в самом начале. Вот, поздравляю, проблему полиморфизма вы худо - бедно решили. Теперь осталось реализовать инкапсуляцию. Главное, не останавливайтесь на достигнутом!

Тоесть, когда я говорю что-то, это вас удивляет, а когда вы говорите тоже самое но другими словами, вас это не удивляет?

Кодер, то что Вы предложили в примере, наверное самый чистый вариант решения данной проблемы в С. Только у него есть один существенный недостаток - он использует макросы. А макросы ужасно неприятны в отладке и к тому же они очень толерантны к глупым ошибкам. Как только Ваши макросы станут посложнее, вы почувствуете эту проблему. Кроме этого макросы не решат проблемы с ассоциированными данными. Так при создании Thread в Windows возвращается HANDLE. Он используется в последующих операциях с этой самой Thread. Что-то подобное должно быть и в UNIXе. Класс обеъдинит вместе данные и операции над ними.
...
Рейтинг: 0 / 0
25 сообщений из 123, страница 2 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программирование работы сервера с множеством клиентов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]