vect.push_back(thread(pmemfunc[i-1],foo,fun[i-1])); }for(auto& t : vect) t.join();system("pause");return0; } vect中插入3个线程对象,线程中调用类成员函数,之后进行join。题目所给的Foo类,只要加上一个mutex成员,编译就不通过,报错: C2661 “std::tuple<void (__thiscall Foo:: * )(...
thread thread1(Function, &obj); 这样,函数Function里头的pObj就指向了对象obj对应的指针,可以调用obj.MemberFunction(),以此实现thread回调函数调用类的成员函数的功能。 thread回调函数还有其他的好处,比如可以很方便的传递参数。上面的例子用来调用没有任何参数的成员函数,但如果成员函数含有参数,就可以这样实现: ...
cdemodlg::threadfunc(); // 错误的调用方式 这是不正确的,因为 threadfunc 是一个成员函数,它需要一个 cdemodlg 类的实例来调用。 3. 修改调用方式 要修复这个问题,你需要使用指向成员的指针,并通过一个 cdemodlg 类的实例来调用它。如果你是在多线程环境中(例如使用 std::thread),你可以这样做: cpp...