【发布时间】:2018-07-16 10:08:10
【问题描述】:
我是线程和类的新手,并试图创建一个类。我有两个成员函数,其中一个使用线程调用另一个。
bool CSocket::StartCamera()
{
bool m_SendFlag;
m_SocketIn = socketInitialize(m_CameraIP, m_CameraPort);
if (m_SocketIn == INVALID_SOCKET)
return false;
m_SendFlag = sendCommand(m_SocketIn);
if (!m_SendFlag)
return false;
std::thread acquiringThread(&CSocket::callReceiveFxn, m_SocketIn);
acquiringThread.join();
}
其他成员函数是
void CSocket::callReceiveFxn(SOCKET socket)
{
unsigned char *m_frameBuffer = NULL;
while (true)
{
m_frameBuffer = receivePacket(socket);
m_ImageQ.Enqueue(m_frameBuffer, MAX_BYTE_PER_FRAME);
}
}
所以我的StartCamera 函数使用线程调用callReceiveFxn。
但是在std::thread acquiringThread(&CSocket::callReceiveFxn, m_SocketIn); 发生错误说
错误 3 错误 C2064:术语不计算为带 1 个参数的函数
谁能告诉我为什么会出现这个错误,请告诉我解决方案
【问题讨论】:
-
您创建一个线程只是为了立即等待它完成。该线程也恰好永远不会返回。这没有意义。
-
错误告诉你
CSocket::callReceiveFxn不是一个接受一个参数的函数。它是一个 member 函数,它们是不同的。 -
@PasserBy 因为它不断地拍摄图像帧我将使用 IPC 稍后停止线程
-
那么如何使用线程调用该成员函数
-
旁白:为什么一些局部变量使用
m_前缀?这是积极误导使用匈牙利符号
标签: c++ multithreading function class