Я пишу плагин, который использует контекст GLEWMX. Плагин загружает контекст GLEWMX под идентификатором потока (1). Затем, когда я должен что-то запустить, он запускает эту задачу под идентификатором потока (2). У меня есть доступ к идентификаторам потоков.
Должен ли я переключать активный поток на поток (1) с помощью std: thread, чтобы я мог получать доступ и запускать вещи в этом контексте? Как это сделать
Да и нет. Некоторые библиотеки действительно ограничены работой в одном потоке, и я предполагаю, что GLEWMX является одним из них. Это действительно означает, что вы не должны называть его из потока 2.
Но когда вам нужно что-то сделанное потоком 1, вы не можете переключить "активный поток". На современных компьютерах все равно есть несколько активных потоков, поэтому факт, что поток 2 активен, даже не означает, что поток 1 является пассивным.
Правильное решение состоит в том, чтобы создать поточную рабочую очередь для потока 1. Затем поток 2 может работать, а поток 1 выбирает работу, когда готов. К сожалению, для этого нет поддержки стандартной библиотеки, вам придется сворачивать вместе. Используйте std::condition_variable
и .wait
в потоке 1.