在优化VTK的渲染机制时,需要将一些流程交给子线程去做,但子线程里的某些函数由要交给主线程去做,所以测试了一个在线程间传递函数的Demo.
#include <iostream>
#include <thread>
#include <functional>
#include <mutex>
#include <condition_variable>
#include <iostream>
#include <thread>
#include <functional>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool done = false;
std::function<void()> func2;
// 第一个函数
void function1() {
std::unique_lock<std::mutex> lock(mtx);
std::cout << "Function 1 in child thread" << std::endl;
}
// 第二个函数
void function2() {
std::cout << "Function 2 in main thread" << std::endl;
done = true;
cv.notify_one();//通知子线程
}
// 第三个函数
void function3() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [] { return done; });
std::cout << "Function 3 in child thread" << std::endl;
}
int main() {
// 创建子线程并执行函数
std::thread t([&]() {
function1();
// 将第二个函数的地址传递给主线程
{
std::unique_lock<std::mutex> lock(mtx);
func2 = function2;
}
cv.notify_one();
function3();
});
// 主线程执行第二个函数
std::function<void()> func2Copy;
{
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [&] { return func2 != nullptr; });
func2Copy = func2;
}
func2Copy();
t.join();
return 0;
}
本文介绍了如何在VTK渲染优化中使用C++实现子线程与主线程之间的协作,通过互斥锁和条件变量管理函数传递,确保关键操作在正确的时间执行。
2277

被折叠的 条评论
为什么被折叠?



