crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Синхронизация потоков, ...
Гость_Гость_Алексей_*_*
сообщение 11.4.2012, 0:52
Сообщение #1





Гости








    


В общем задача в том чтоб
Запустить функцию из главного потока, которая находиться в дочернем потоке(ну дочерний поток естественно создан на boost)...
подождать пока она выполниться(в дочернем потоке) и продолжить работу...

я в многозадачность некогда не лез раньше... но походу пора уже..
читал про mutex но хз.. на сколько оно подойдет здесь


Код не прошу.. прост укажите куда копать пожалуст.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 11.4.2012, 8:36
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1593
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


есть у буста в документации по boost::thread раздел синхронизация потоков. это базовая документация по всем видам синхронизации в бусте (для потоков).

в данном случае ты можешь применить условные переменные (condition variables) или барьеры (barriers). барьеры проще(тут их вполне достаточно будет), условные переменные - универсальней.

но вообще, какой смысл запускать функцию в отдельном потоке, если ты всё равно ждёшь её завершения? тут какая-то чисто логическая ошибка. либо ты что-то недопонял, либо не так сформулировал.
обычно потоки используются для параллельного выполнения задач.

Сообщение отредактировал Iron Bug - 11.4.2012, 8:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Алексей_*_*
сообщение 11.4.2012, 8:54
Сообщение #3





Гости








    


У меня окно создаться на glut для дебага объектов из основного(оно показывает положения, пересечения и тп..)
у glut последняя функция блочит поток.. и начинается обработка событий glut.

в общем в release glut не будет.. прога консольная... работает через сетку... поэтому таймеры и т.п. работают через io_service boost

ну и естественно при дебаге функция рисования и изменения данных не должны отрабатываться параллельно

в общем такая история)
Спасибо почитаю...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Алексей_*_*
сообщение 11.4.2012, 22:37
Сообщение #4





Гости








    


В общем если кому интересно(что вряд ли) сделал через boost::barrier и
boost::signal0 для вызова из основного кода события перерисовки... всё начало работать... но тупить страшно..) мож гдето и накасячил когда изврашялься с glut....

в общем понял что и даже для дебага такое извращение обработки событий не очень подходит..
Нашел альтернативу glut в которой система не вешается по вызову функции.... инсталлировать окно через SDL там обработка событий идет в цикле как на winApi.... и можно обрабатывать всё это в io_service..


Iron Bug, спасибо за помощь, как не напишу всё время от тебя ответы идут... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 12.4.2012, 8:56
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1593
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


Цитата(Гость_Гость_Алексей_*_* @ 12.4.2012, 1:37) *
как не напишу всё время от тебя ответы идут

просто мало кто с бустом тут общается плотно. а я его уже много лет юзаю успешно.

барьеры и сигналы особо тормозить не должны, но это смотря куда их лепить, конечно.
самая быстрая синхронизация, по моим расчётам, это условные переменные. для меня время реакции системы очень критично, поэтому я проводила тесты на скорость методов синхронизации.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 9.12.2019, 6:09