3

我读过这可以使用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::r​​efresh_data()void Log::r​​efresh_data()std::async似乎不喜欢 void 返回...

4

2 回答 2

4

你不能在 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返回类型(您只需删除returnlambda 中的语句)。

于 2018-05-15T10:05:37.140 回答
1

因为refresh_dataLog您需要使用std::bindwithmodel_log或使用 lambda 的方法:

std::future<bool> retCode = std::async( [this] {return model_log.refresh_data(); }); 
于 2018-05-15T10:03:20.877 回答