Привет Двач, помогите советом и наставлением. Ибо я нуб и учусь чему-то только когда сталкиваюсь с этим. В идеале - прямым ответом на вопрос. Суть в чем, пытаюсь написать игрульку на С++ при помощи SFML , и для создания потоков юзаю include thread. И вот у меня два вопроса. Первый.thread thr.(вся фигня, т.е. имя функции и пар-ры)и далече thr.join() или thr.detach(), — вот чем они толком отличаются? Я читал что джойн блокирует выполнение остальных потоков пока этот не сделается. Но какой тогда в этом смысл? Мне ж нужно что б параллельно шло. detach - на одном форуме писали что это типа делает поток фоновым, то есть я так понял работает параллельно другим, но на другом писали что он удаляет поток вообще. Мне нужно что бы они все работали параллельно. Че использовать? Второй.thread очень удобная штука, и я могу передать туда любые параметры. Вот только когда я передаю RenderWindow window (то есть указатель на него) , я никак не могу нарисовать что то из этого потока. Вообще. При запуске консоль дико спамит Failed to enable window's context. Все что не пробиваю по этой теме - все на ангельском. Не понятно. На русском посоветовали прописать в конце window.setActive(false), то есть типа отключать окно при передаче, но во1ых это не помогло, во2ых я не вижу в этом смысла, т к даже если я никуда не передаю окно, а сразу создаю его в другом потоке - рисовать оттуда ничего не выходит. Как быть в общем ?
>>788430 (OP)http://en.cppreference.com/w/cpp/thread/thread/detach и http://en.cppreference.com/w/cpp/thread/thread/join уже прочитал?
>>788447Я не знаю инглиш. Т.е. знаю, но на уровне дноря. А как показывает практика, автоперевод - говно , и им лучше не руководствоваться. >>788447>
>>788430 (OP)>Вот только когда я передаю RenderWindow window (то есть указатель на него) , я никак не могу нарисовать что то из этого потока. Вообще. При запуске консоль дико спамит Failed to enable window's context.Наверно дело не в самих тредах. Огл может рисовать только в главном цикле главного окна(для него создается контекст отрисовки).
>>788430 (OP)join подключается к потоку и дожидается его выполнения (выполнения тела потока, например, если у тебя создан:> std::thread([](){ doSmth(); });то пока doSmth() не выполнится, код после thread.join() выполняться не будет, если выполнение doSmth завершено еще до join'a, то после выполнения thread.join(); будет выполняться следующий код, очевидно. Если во время выполнения потока будет сгенерировано исключение, вот тут я забыл, лел, но для std::async оно пробрасывается в участок, в котором вызвается get() фьючерса.Если вызван thread.detach(), то ты отсоединяешь владение потоком, то есть ты больше не можешь к нему подключиться join()-ом, потому что это вызовет ексепшен (ненавижу их).> thread очень удобная штука, и я могу передать туда любые параметры. Вот только когда я передаю RenderWindow window (то есть указатель на него) , я никак не могу нарисовать что то из этого потока. Вообще. При запуске консоль дико спамит Failed to enable window's context. Все что не пробиваю по этой теме - все на ангельском. Не понятно. На русском посоветовали прописать в конце window.setActive(false), то есть типа отключать окно при передаче, но во1ых это не помогло, во2ых я не вижу в этом смысла, т к даже если я никуда не передаю окно, а сразу создаю его в другом потоке - рисовать оттуда ничего не выходит. Как быть в общем ? Если ты рисуешь OpenGL залупу, то тебе нужно переключить контекст GL в текущем треде (потому что для потоков по-умолчанию контекст не задан, и рендеришь ты в нихуя, поэтому у тебя ничего не рисуется).
>>788430 (OP)Пока ты не делаешь join, потоки работают параллельно. join нужен, чтобы дождаться завершения потока (если у тебя там конечная операция, а не обработка io, например). detach, наоборот, отбрасывает контроль над потоком, после него join сделать уже невозможно.
>>788484Щикаарно, есть рекомендации как составить запрос в поисковике что б быстрее найти как это делается? )
>>788498Хуй знает, с сфмл не работал ни разу, но вот это, может быть, попрет (не уверен, что для многопоточки это прокатит)http://www.sfml-dev.org/tutorials/2.0/window-opengl.php#managing-multiple-opengl-windows
>>788452> Я не знаю инглиш.Для C++ это пререквизит, лалка.