出现错误如下:
1.C2672 std::invoke”: 未找到匹配的重载函数
2.未能使函数模板“unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)”专用化
原因是因为定义线程参数给错了,如下代码
错误代码如下
某头文件线程声明如下
class CSocketHelper {
...
//这里省略掉构造等其他成员函数
void RtspTcpThread(void* const ptr);//RtspTcpThread为我们定义的线程
...
};
实现文件如下
void CSocketHelper::RtspTcpThread(void* const ptr)
{
//具体实现我们不考虑
}
//CreateSendTcpUpdate为CSocketHelper中的一个成员函数
SOCKET CSocketHelper::CreateSendTcpUpdate(const char* ip_addr, int port_no)
{
//此写法是引起上述中爆出的错误,原因在于thread需要传入的线程函数不能是成员函数,并且不能&RtspTcpThread
//所以需要把RtspTcpThread变为静态函数
std::thread m_thread(&RtspTcpThread,T_VoidF<void*>(EvppClient::GetInstance()->p_rtsptcploop));
m_thread.detach();
}
正确修改代码如下
class CSocketHelper {
...
//这里省略掉构造等其他成员函数
static void RtspTcpThread(void* const ptr);//RtspTcpThread为我们定义的线程
...
};
SOCKET CSocketHelper::CreateSendTcpUpdate(const char* ip_addr, int port_no)
{
std::thread m_thread(RtspTcpThread,T_VoidF<void*>(EvppClient::GetInstance()->p_rtsptcploop));
m_thread.detach();
}