2014-11-05 2 views
0

Я пишу плагин, который использует контекст GLEWMX. Плагин загружает контекст GLEWMX под идентификатором потока (1). Затем, когда я должен что-то запустить, он запускает эту задачу под идентификатором потока (2). У меня есть доступ к идентификаторам потоков.Доступ к текущей теме

Должен ли я переключать активный поток в поток (1) с помощью std: thread, чтобы я мог получать доступ и запускать вещи в этом контексте? Как это сделать

ответ

1

Да и нет. Некоторые библиотеки действительно ограничены работой в одном потоке, и я предполагаю, что GLEWMX является одним из них. Это действительно означает, что вы не должны называть его из потока 2.

Однако, когда вам нужно что-то сделанное потоком 1, вы не можете переключать «активную нить». На современных компьютерах все равно есть несколько активных потоков, поэтому факт, что поток 2 активен, даже не означает, что поток 1 является пассивным.

Правильное решение - создать поточную рабочую очередь для потока 1. Затем может быть вложена резьба 2, и нить 1 выбирает работу при готовности. К сожалению, для этого нет поддержки стандартной библиотеки, вам придется самим обманывать себя. Используйте std::condition_variable и .wait в потоке 1.

+0

Проблема, с которой я сталкиваюсь, - это моя программа. Rhino создает все эти потоки, и у меня есть только доступ к идентификаторам потоков, а не уверен, как получить доступ к тому, как потоки создаются первоначально, чтобы сделать рабочая очередь ... так что я думал просто называть что-то в этом первом потоке, но это был хороший ответ –