start_ = std::thread(std::bind(&Runtime_Impl::start, this));
时间: 2024-05-17 19:19:55 浏览: 8
这段代码的作用是创建一个名为`start_`的线程,并将其绑定到当前对象的`start()`成员函数上运行。这里使用了`std::bind()`函数将`start()`成员函数与当前对象`this`进行绑定,从而实现了成员函数作为线程函数的功能。
具体来说,`std::bind()`函数可以将一个函数对象(包括成员函数)和其参数绑定到一起,生成一个新的函数对象。在这里,`std::bind()`函数将`start()`成员函数和当前对象`this`绑定到一起,生成一个新的函数对象,该函数对象在执行时会调用`start()`成员函数,并传递当前对象`this`作为参数。
然后,使用`std::thread()`函数创建一个名为`start_`的线程,并将新生成的函数对象作为线程函数,从而实现了在新线程中运行`start()`成员函数的功能。需要注意的是,在创建线程时,需要将当前对象指针`this`作为参数传递给线程函数,以便在线程中可以访问到当前对象的成员变量和成员函数。
相关问题
std::shared_ptr<std::thread> get_thread_;get_thread_ = std::make_shared<std::thread>(std::bind(&HTTPClient::get_list, 1));语法对吗
这段代码的语法有一些问题。
首先,std::bind函数的第二个参数应该是一个函数对象,而不是一个整数类型的值。在这里,1是一个整数类型的值,应该替换为一个能够调用HTTPClient::get_list函数的函数对象。
其次,std::thread的构造函数需要的第一个参数应该是一个可调用对象,而不是一个返回值为可调用对象的智能指针。在这里,可以使用get_thread_指针的解引用运算符将其转换为std::thread对象,然后调用joinable函数来检查线程是否可以加入。
因此,正确的代码应该是:
```
std::shared_ptr<std::thread> get_thread_;
get_thread_ = std::make_shared<std::thread>(&HTTPClient::get_list, this);
if (get_thread_->joinable()) {
get_thread_->join();
}
```
这里的this指针用于将HTTPClient对象作为第一个参数传递给get_list函数。另外,在启动线程之前,应该检查线程是否可以加入,以避免在线程结束之前销毁智能指针。
m_thread = std::thread(std::bind(&CTimer::Run,this));
这段代码使用了C++的线程库std::thread来创建一个新的线程,并通过std::bind将CTimer类中的Run函数与当前对象绑定在一起。这样,当线程启动时,就会调用CTimer对象的Run函数。这种方式可以实现并发执行,提高程序的效率。
另外,还有一种使用boost库的方式来创建线程。boost库提供了boost::thread类,可以通过boost::bind将函数或成员函数与参数绑定在一起。比如可以使用boost::asio库的io_service::run函数来创建新的线程,并将其与io_service对象绑定在一起。这样,在新线程中,io_service会不断地运行,处理各种异步操作。
对于异步操作的回调函数,也可以使用boost::bind来绑定参数。比如可以使用boost::asio库的async_wait函数,<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [「 C++ 11」std::thread “invalid use of non-static member function“问题处理](https://blog.csdn.net/zcc1229936385/article/details/126441007)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [boost::asio::deadline_timer(理解)](https://blog.csdn.net/aSnakePy/article/details/102678906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]