@文心快码std::thread 调用类成员函数 文心快码 在C++中,std::thread 可以用来创建新线程,但在调用类成员函数时,需要特别注意,因为类成员函数需要一个隐式的 this 指针来访问类的成员变量和成员函数。这意味着我们不能直接将类成员函数作为线程函数传递。下面我将分点解释如何正确地使用 std::thread 来调用类成员...
//packaged_task的使用,直接得到多线程调用函数的返回值#include<iostream>// std::cout#include<utility>// std::move#include<future>// std::packaged_task, std::future#include<thread>// std::threadintfun(inta){std::this_thread::sleep_for(std::chrono::seconds(3));return2* a; }intmain(){...
当我们在利用thread创建一个线程,希望单独开线程,运行某个函数的时候,我们只要在主线程中,使用 std::thread(函数名,函数参数)就可以了 (如果不明白,请参阅:“C++11多线程std::thread的简单使用”) 然而,有时候我们想开一个线程,运行一个类里面的某个函数。 譬如: 我们有一个class love,里面有一个成员函数 s...
示例2:当你要传递类的成员函数给线程时,你还需要传递一个对象的指针或引用作为该成员函数的调用者。 class MyClass { public: void myFunction() { std::cout << "Function called on thread!" << std::endl; } }; int main() { MyClass obj; std::thread t(&MyClass::myFunction, &obj); //...
上面的例子中,使用了std::thread类的另一个成员函数joinable(),用于判断当前线程是否已经join。注意,无论是join还是detach方式,都只能调用一次。 再思考一个问题,为什么不将join设计成在thread析构函数中隐式调用呢? 如果设计成隐式join():将导致调用线程一直等到子线程结束才返回。如果子线程正在运行一个耗时任务,...
std::thread thrd_name(std::mem_fn(&MyClass::run), 对象名, iPara)如果run是静态成员函数就不用写对象名了
// 把t3 move给t1,非法。因为`t1`已经有了一个相关的线程,会调用`std::terminate()`来终止程序。 t1 = std::move(t3); } 通过调用join()成员函数来等待线程结束 #include <iostream> #include <thread> #include <chrono> void foo() { std::this_thread::sleep_for(std::chrono::seconds(1)); ...
关于线程参数的传递 除非显式的调用std::ref声明传入引用,不然哪怕被调用的函数参数是引用,实际上被创建的线程都会复制一份参数,不是真正的引用,而且如果没有显式的调用std::ref,那么被调用的函数参数要写引用也只能用const引用。 上面使用类的成员函数中有特殊情况。
一、类的普通成员函数作为Thread的参数 class threadtest { private: public: threadtest() { } ~threadtest() { } // 类的普通成员函数 void test_fun1(int num) { for (int i = 0; i < num; i++) cout << "thread test1" << endl; ...
C++11 std::thread在类的成员函数中的使用 #include <thread>#include<iostream>classWrapper {public:voidmember1() { std::cout<<"i am member1"<<std::endl; }voidmember2(constchar*arg1, unsigned arg2) { std::cout<<"i am member2 and my first arg is ("<< arg1 <<") and second arg ...