异步 60 秒延迟后C++执行函数?



我已经读到这可以使用std::this_thread::sleep_forstd::async来实现,但它对我不起作用。

下面是要调用的函数:

bool Log::refresh_data()
{   
std::this_thread::sleep_for( std::chrono::minutes( 1 ) );
std::vector<std::string> file_info = this->file.read_pending_if();
for( auto line : file_info )
{
this->append( line );
}
return true;
}

这是从另一个函数调用的。 下面的代码中有两个失败用法的示例:

void MVC::refresh_data()
{
// Error C3867  'Log::refresh_data': non-standard syntax; use '&' to create a pointer to member
std::future<bool> retCode = std::async( this->model_log.refresh_data, 0 );        
std::future<bool> retCode = std::async( this->model_log.refresh_data(), 0 );
}

最初,bool Log::refresh_data((是void Log::refresh_data((std::async似乎不喜欢 void 返回...

你不能在C++中传递这样的非静态方法,你可以这样做:

auto retCode = std::async(&Log::refresh_data, model_log);
// Or with a lambda:
auto retCode = std::async([this]() { 
return model_log.refresh_data(); 
});

这些代码适用于void返回类型(您只需删除 lambda 中的return语句(。

因为refresh_data是一种Log的方法,所以你需要将std::bindmodel_log一起使用,或者使用lambda:

std::future<bool> retCode = std::async( [this] {return model_log.refresh_data(); }); 

相关内容

  • 没有找到相关文章

最新更新