首页 > 解决方案 > 线程中的模板函数

问题描述

我刚开始学习编码,我现在有一个问题...我在论坛上搜索了类似的但我没有找到任何...

我在这个类(函数)中有类(调度程序)和一个模板函数

从这个类的默认构造函数我尝试在一个线程中执行这个函数

我不确定我是否很清楚,所以我给你这些台词:

错误:

-static assertion failed: std::thread arguments must be invocable after conversion to rvalues

-error: no type named 'type' in 'struct std::thread::_Invoker<std::tuple<void (Scheduler::*)(int&, Temperature&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char), Scheduler*, int, Temperature, const char*, char> >::__result<std::tuple<void (Scheduler::*)(int&, Temperature&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char), Scheduler*, int, Temperature, const char*, char> >'

该功能(在我的课程调度程序的公共部分中):

template<class T, class S>
     void function(T& p_data,S& obj, const std::string p_file, char p_type)
     {
         for (int i = 0; i<10; i++){
                    Sleep(3500);

                    p_data = obj.getData();
                    serv.fileWrite(p_data, p_file, p_type);
                    serv.consoleWrite(m_Tmp, 'T');
                    serv.consoleWrite(m_Prs, 'P');
                    serv.consoleWrite(m_Hmy, 'H');
                    serv.consoleWrite(m_Light, 'L');
                    std::cout << "--------------------" << std::endl;
                }

     }

线程(在默认构造函数中):

thread t1(&Scheduler::function<int,Temperature>, this, m_Tmp, objTemperature, "Logs/Temperature.log", 'T');

在这里......我没有看到我做错了什么......

标签: c++multithreadingtemplates

解决方案


虽然严格来说这不是唯一的方法,但将线程的入口点包装在 lambda 中通常会使事情变得更加简单:

thread t1([this, objTemperature]{
  function(m_Tmp, objTemperature, "Logs/Temperature.log", 'T');
});


推荐阅读