Название: boost::thread / boost::bind + классы Qt Отправлено: RedDog от Май 30, 2013, 13:26 Интересует совместимость означенных сабжей. Какие подводные течения могут преследовать, при многопоточности от буста, если в нее Qt класс передать, как bind отработает вместе с моком? И т.д. и т.п. В общем буду рад выслушать мнения тех кто работал и глубоко разбирался в сабже.
Название: Re: boost::thread / boost::bind + классы Qt Отправлено: thechicho от Май 30, 2013, 13:59 а чем вас QThread не устраивает?
Название: Re: boost::thread / boost::bind + классы Qt Отправлено: RedDog от Май 30, 2013, 14:01 а чем вас QThread не устраивает? А где я такое сказал?Название: Re: boost::thread / boost::bind + классы Qt Отправлено: Old от Май 30, 2013, 14:42 Интересует совместимость означенных сабжей. Какие подводные течения могут преследовать, при многопоточности от буста, если в нее Qt класс передать, как bind отработает вместе с моком? И т.д. и т.п. В общем буду рад выслушать мнения тех кто работал и глубоко разбирался в сабже. Да все должно работать. Я сам не совмещал, но не вижу причин почему это не должно работать.Ограничения те же: не дергать GUI из других ниток. Скорее всего заработают даже очереди событий QEventLoop. connect не сможет определять что получатель находиться в другом потоке и назначать тип передачи сигнлала через очередь, но это фигня. Название: Re: boost::thread / boost::bind + классы Qt Отправлено: RedDog от Июнь 27, 2014, 14:58 Прошу прощения за некропост, но вот какие у меня наблюдения появились по поводу ацких связок Qt+boost+говнокод. Возможно это кому то поможет.
Ситуация 1: некий цикл типа while(true), В нем создается свой класс с QTcpSocket. Последний в таком говнокоде не хочет работать асинхронно. Пришлось создавать отдельный тред для асинхонной работы сокета. Псевдокод: Нерабочий вариант: Код: while( true ) Рабочий: Код: while( true ) Ситуация 2: есть сторонняя либа, которой надо указать свой обработчик (каллбэк-функцию). Этот обработчик внутри либы живет в своем каком то отдельном потоке. Сделал его методом класса, в обработчике высылаю Qt-шный сигнал другим объектам. Забиндил обработчик через буст в либу. Пару недель работало нормально. Потом надо было добавить функционал, когда либа прекращает работу (в каллбэке есть специальные параметры). Стало вылетать. В общем пришлось исключить обработчик из класса, и отказаться от бустового бинда, передавая напрямую каллбэчную ф-ю, в которой вызывать метод класса, и из последнего эмитить сигнал. Псевдокод тут приводить не буду, ибо много очень. Название: Re: boost::thread / boost::bind + классы Qt Отправлено: OKTA от Июнь 27, 2014, 19:39 Надеюсь, while(true) никому не поможет ;D ;D ;D ;D
|