将模板args传递给std :: thread

拉马夫

我在将args传递给调用模板函数的std :: thread时遇到了一些问题。

template <typename F, typename... A>
void start(int interval, F func, A&&... args)
{
    if (_running.load(std::memory_order_acquire)) {
        stop();
    };
    _running.store(true, std::memory_order_release);
    _thread = std::thread([this, interval, func, args]()
    {
        while (_running.load(std::memory_order_acquire))
        {
            func(std::forward<A>(args)...);

            for (int i = 0; (i <= (interval / 200)) && _running.load(std::memory_order_acquire); i++)
                std::this_thread::sleep_for(std::chrono::milliseconds(200));
        }
    });
}

编辑:添加了更多的细节我应该能够将任何函数传递给“启动”任何ammount或args

void ThreadProc(HWND hwnd)
{
    Beep(1000, 100);
}

start(2000, ThreadProc, hwnd);

错误:

error C3520: 'args': parameter pack must be expanded in this context
    note: see reference to function template instantiation 'void CallBack::start<void(__cdecl *)(HWND),HWND&>(int,F,HWND &)' being compiled
    1>          with
    1>          [
    1>              F=void (__cdecl *)(HWND)
    1>          ]
ts
_thread = std::thread([this, interval, func, &args...]()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过引用将对象传递给C ++ 11中的std :: thread

如何将参数传递给Thread中的ThreadStart方法?

将Runnable实例传递给Thread会调用Thread的子类的run()而不是Runnable类的run()

将模板函子传递给模板std :: function

如何将可变参数传递给std :: thread?

将类的成员函数传递给std :: thread

将参数传递给std :: thread包装器

使用删除的函数'std :: thread :: thread(const std :: thread&)'

是否可以将重载方法传递给std :: thread

将参数传递给threading.Thread

将参数传递给std :: thread的区别,C ++

将std :: function *传递给模板参数

将目标函数参数传递给Thread构造函数

将对象传递给Lambda std :: thread(C ++)中的函数:尝试使用已删除的函数

如果容器不是调用函数中的引用,则通过std :: thread将引用传递给迭代器失败

将std :: sub_match作为参数传递给std :: thread时出了什么问题?

为什么我们不允许将纯引用参数传递给std :: thread但允许传递原始指针?

指向对象的指针作为参数传递给std :: thread时的内存可见性

将模板(无规范)传递给std :: thread()会给出错误:<不可解析的重载函数类型>匹配错误

如何将std :: less传递给类模板?

'std :: thread'如何确定传递给构造函数的可变参数的数量

std :: thread Args ...列表中的函数指针

我可以将每个动作引用的数组传递给std :: thread吗?

通过(Args && ...)构造std :: thread

将std :: shared_ptr传递给函数对象到std :: thread

显示 std::thread 函数传递的错误数据。

无法将参数传递给 boost::thread 构造函数

函数的地址如何传递给 std::thread

我是否需要通过 Thread 将变量传递给线程?