可从线程访问的C ++类成员

时间:2018-08-27 10:26:25

标签: c++ multithreading sockets parameters

我有一个基类,用作不同连接类型(如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**
    // ...
}

0 个答案:

没有答案
相关问题