Народ, блиц-вопрос по WinAPI. Могу ли я, имея один TCP WinSock, использовать его в двух потоках (в одном принимать данные через блокирующий select(), в другом отправлять)? Не будет никаких конфликтов по внутренним структурам?
:42248908 Днём это был чат по аниме. Ненадолго, правда, но был. К Си сообщение тоже не относится. К политоте тем более.
@VladimirGamalyan Есть программа-сетевой клиент. В ней два потока — GUI и вспомогательный. Также имеется несколько открытых подключений, каждое из которых работает в режиме «запрос-ответ». Так как select() на все сокеты блокирующий, я вынес его во вспомогательный поток. И, если мне потребуется отправить запрос, мне придётся ждать ответа на предыдущий запрос (чтобы произошёл возврат из select()). И, чтобы не ждать этого, я решил отправлять запросы из главного потока.
@VladimirGamalyan А как надо правильно организовывать работу с сокетом, чтобы не плодить потоки?
@VladimirGamalyan WinAPI, потом планирую портировать на Linux (поэтому, кстати, и не использую асинхронный ввод). С Boost-ом не хотел связываться, потому что всё равно придётся порождать отдельный поток для io_service, чтобы не блокировать основной поток вызовом run().
@Arhad Тогда буст самое оно по произвоидтельности (использует особенности обоих систем). То что io_service работает отдельно, это прозрачно, у вас калбеки без необходимости синхронизировать данные. (к томуже можно и не в отдельном потоке).
@VladimirGamalyan В документации было что-то про отсутствие многопоточности у сокетов. То есть, как я понял, к потоку с io_service придётся подтаскивать и отправку. И про не в отдельном потоке не понял — а как же я буду очередь оконных сообщений крутить? Про неё же Boost ничего не знает.
@webstackoverload Не суть важно (ибо могу и забить на него через некоторое время, а прослыть пафосным долгостроителем как-то не хочется). В любом случае мне придётся сталкиваться с этим вопросом при разработке любого приложения, работающего с сетью.
@alexolut С чего вы взяли? На SO меня по IP банили (за проделки на их Карьере).
А еще я пожизненно забанен с удалением всех своих публикаций (про Go!) на Хабре. Даже за деньги отказались без объяснения причины дать право что–то писать.
@Arhad Если стартовать io_serice через run, он в отдельном потоке, прозрачно для вас работает (можно например на старте приложения сделать). Затем даете в любое время асинхронные команды с калбеками (прочитать или записать). Вариант без отдельного потока - самому дергать io_service::poll_one в своем цикле главном.
@VladimirGamalyan А, то есть этот метод сразу же возвращает управление? Я думал, что по аналогии, этак, с QApplication::run() он будет крутить очередь в том же потоке, из которого его вызвали. Тогда вопросов больше не имею.
@alexolut Справедливость — вряд ли, к сожалению. Помню, как–то я что–то делал, планировал для нас. А мне в конторе в последний, нет, делать не будет, не получится. Я им про справедливость, а мне это в ответ: goo.gl/nkd5Ve
@NicolasChabanovsky О, есть контакт. Только если гулять по временной шкале сверху, то в 2013-м было девять публикаций, а в начале 2014-го — всего пять.
@NicolasChabanovsky Так что вот и материал для блога сообщества.
Что еще забавно. Вся архитектура Сети Знаний была построена как несколько сайтов, которые по HTTPS json–данными обмениваются. Я в универе это на дипломе рассказывал. Мне сказали, что так делают только самые неумные люди. Поставили три. А сейчас это модным словом «микросервисы» зовется. Люди на конференциях что–то рассказывают.
2
@Arhad Это отдельная история. Одно из условий перехода на платформу SE была лицензия СС-BY-SA.
@NicolasChabanovsky А, девять и четыре — это сумма количества статей и комментариев. Я уж подумал вначале, что вы какую-то из статей удалили (ещё задолго до уничтожения профиля).
У меня есть другая история. Человеку надо было сделать диплом, но он много работал и ничего не сделал. Правда он был дизайнером. Так вот, его все любили. Он пришел на защиту и во всем признался. Ему сказали, а ну ты бы сделал, если бы время было и очень хорошо, на тебе отлично!
@avp Ответа у меня нет. Мне всегда железо нравилось (моя первая работа инженер по ремонту электроники).
Выше это я про значимость хороших оценок в дипломе — они не всегда коррелируют со знаниями, а скорее с возможностью понравится кому надо.
@avp Спасибо! Но мне нравится заниматься исследованиями. Социология, психология, философия мне всегда казались бесполезными, непонятными науками. Как в SO начал работать, засел читать теорию по этим вопросам и понял, что ошибался. В общем, думаю, интерес можно во всем найти, главное, чтобы были подходящие посильные прикладные задачи.
@NicolasChabanovsky ага. Такие вроде бы простые на первый взгляд и легко реализуемые задачи очень хороши. Иногда из них вырастают замечательные вещи. Например, *nix -)
@NicolasChabanovsky мой хороший друг получил отлично и множество эпитетов в духе "лучшая защита в истории вуза" за программку уровня тестового задания для джуна. Социальные скиллы сыграли, он умудрился так себе подобрать научника и рецензентов, что они его жутко расхвалили на защите.
и тему на границе интересов кафедры так что никто из тех кому было дело, не смог за защиту понять что именно он делал
и сработал эффект "уважаемые люди же хвалят, рассказывает бойко, наверное охренительное что сделал"
ну серьезно, его научница на голубом глазу на защите наврала что его программа уже имеет коммерческий успех. Ее самое главное не просил никто даже, сама сочинила