我有一个基类,用作不同连接类型(如USB,TCP等)的接口。这些方法是纯虚拟方法,并在其子类中实现。
正如您在我的TCP_Conn
中所看到的,我想要一个struct
,其中包含我可能需要的所有连接(套接字,接收缓冲区等)。
发送请求来自具有某些命令的高级API,并通过Send()
函数直接发送。此发送功能中有一个控制结构,该结构等待RCThread
从服务器接收完整的答案。
我只从子类中读取new_message
并从线程中对其进行写入。
我的问题是,我收到消息:
非静态成员引用必须相对于特定对象
访问TCP_RC_data
内的数据对象recvfromTCP()
时。
因此,我认为真正的问题是,我不完全了解如何实例化类型RECEIVE_STATE
的对象,该对象可以在线程和我的类中进行访问。
我该如何实现?
感谢您的帮助!
这是我的代码:
class TCP_Conn : Conn_Base
{
private:
struct RECEIVE_STATE { /* ... */ } TCP_RC_data; //Contains SOCKET, Receive_buffer, connection state (i.e. Terminating)
char[] new_message;
SOCKET TCP_Socket;
public:
Connect();
Disconnect();
Send(char *buffer);
startRCThread();
endRCThread();
RCThread();
recvfromTCP();
};
void TCP_Conn::StartReceiveThread()
{
TCP_RC_data.GlobalReceiveThreadState = THREAD_STATE_STARTING;
std::thread RCThread(&TCP_Conn::MSG_Receive_Thread, this);
RCThread.detach();
while (RC_Thread_data.GlobalReceiveThreadState == THREAD_STATE_STARTING)
Sleep(20);
}
void TCP_Conn::MSG_Receive_Thread()
{
while (THREAD_STATE_RUNNING) {
new_message = recvfromTCP(); //Custom Wrapper for recvfrom
}
}
void TCP_Conn::recvfromTCP()
{
// ...
recvfromTimeOut(RC_Thread_data.TCPReceiveSocket, 0, 1000); **ERROR**
// ...
}