2014-11-05 69 views
0

我在寫一個使用GLEWMX上下文的插件。該插件在線程標識(1)下加載GLEWMX上下文。然後當我運行一些東西時,它會在線程標識(2)下運行該任務。我可以訪問兩個線程ID。訪問正在運行的線程

我應該使用std:thread將活動線程切換到線程(1),以便我可以在該上下文中訪問和運行事物嗎?我該怎麼做

回答

1

是的,沒有。有些庫確實被限制在單線程上運行,我假設GLEWMX就是其中之一。這確實意味着你不應該從線程2調用它。

然而,當你需要線程1完成的任務時,你不能切換「活動線程」。在現代計算機上,無論如何都有多個活動線程,所以線程2處於活動狀態的事實並不意味着線程1是被動的。

正確的解決方案是爲線程1創建一個線程安全工作隊列。然後,線程2可以放入工作,線程1在準備就緒時選擇工作。不幸的是,沒有標準庫支持,你必須自己拼湊一個。在線程1中使用std::condition_variable.wait

+0

我遇到的問題是我的程序Rhino正在創建所有這些線程,並且我只能訪問線程ID,不確定如何訪問線程最初創建的方式來執行工作隊列......所以我想在第一個線程上調用一些東西,但這是一個很好的迴應 – 2014-11-05 16:41:14