函数想传参怎么改写: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(); }
时间: 2023-08-24 16:36:17 浏览: 139
如果需要传递参数给get_list函数,可以在std::make_shared函数中添加参数,这些参数将被传递给get_list函数。例如,如果需要将整数1和字符串"example"传递给get_list函数,可以将代码修改为:
```
std::shared_ptr<std::thread> get_thread_;
get_thread_ = std::make_shared<std::thread>(&HTTPClient::get_list, this, 1, "example");
if (get_thread_->joinable()) {
get_thread_->join();
}
```
这里的1和"example"将作为额外的参数传递给get_list函数。需要注意的是,这些参数的类型必须与get_list函数的参数类型匹配。例如,如果get_list函数的参数类型是int和const std::string&,那么传递给std::make_shared函数的参数类型也应该是int和const std::string&。
相关问题
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函数。另外,在启动线程之前,应该检查线程是否可以加入,以避免在线程结束之前销毁智能指针。
std::shared_ptr<CommonAPI::Runtime> runtime = CommonAPI::Runtime::get(); std::string domain = "local"; std::string instance = "zeekr.dhu.ADCU_HmiService"; std::string connectId = "APA_HmiServiceClient"; m_hmiservice_proxy = runtime->buildProxy<ADCU_HmiServiceProxy>(domain, instance, connectId); while (!m_hmiservice_proxy->isAvailable()) { LOGW("Cannot find ADCU_HmiService. 3s retry"); std::this_thread::sleep_for(std::chrono::seconds(SOMEIP_RETRY_SECOND)); } LOGI("find ADCU_HmiService.");
这段代码创建了一个名为`runtime`的`std::shared_ptr<CommonAPI::Runtime>`对象,并使用`CommonAPI::Runtime::get()`函数获取运行时实例。
代码还定义了一些字符串变量,分别表示域名(`domain`)、实例名(`instance`)和连接ID(`connectId`)。
接下来,代码调用了`runtime->buildProxy<ADCU_HmiServiceProxy>(domain, instance, connectId)`函数来构建一个名为`m_hmiservice_proxy`的`ADCU_HmiServiceProxy`代理对象。
然后,代码进入一个循环,检查`m_hmiservice_proxy`是否可用。如果不可用,代码会打印一条警告日志,并使用`std::this_thread::sleep_for`函数暂停一段时间(3秒)。
循环会一直执行,直到`m_hmiservice_proxy`可用。
最后,代码打印一条信息日志,表示已经找到了`ADCU_HmiService`。
请注意,这段代码中使用了一些特定的函数和对象,例如`LOGW`、`std::this_thread::sleep_for`等,这些函数和对象可能是根据具体的开发环境或框架定义的。我无法提供关于这些函数和对象的具体信息。如果您需要更多上下文或其他问题,请随时提问。
阅读全文