异步60秒延迟后在C ++中执行功能?

时间:2018-05-15 09:58:22

标签: c++ stdasync

我已经读过这可以使用 std :: this_thread :: sleep_for std :: 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 似乎没有喜欢虚空回归...

2 个答案:

答案 0 :(得分:4)

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

<textarea></textarea>
<br>
<button onclick="text(this)">text</button>

这些代码使用auto retCode = std::async(&Log::refresh_data, model_log); // Or with a lambda: auto retCode = std::async([this]() { return model_log.refresh_data(); }); 返回类型(您只需删除lambda中的void语句)。

答案 1 :(得分:1)

由于refresh_dataLog的方法,您需要将std::bindmodel_log一起使用,或使用lambda:

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