gpt4 book ai didi

c++ - 问题 : Accessing Vector Inside a Thread

转载 作者:行者123 更新时间:2023-11-30 03:08:04 26 4
gpt4 key购买 nike

当我试图在我的线程外访问 vector 时,我遇到了一个链接错误。我的设计是,当我从客户端收到消息时,我希望消息或数据在我的数据队列中以供进一步操作。但我无法让他们工作。这是我的代码:

.cpp 文件:

// Inside the recv thread
start:
err = recvfrom(RecvSocket, lpData->RecvBuf, BufLen, 0, (SOCKADDR *)&lpData->SenderAddr, &SenderAddrSize);
//lpData is used to access Recv Structure which stores the attributes of the server and client.

switch(lpData->port)
{
case 6516:
{
BuffStack1.push_back(lpData->RecvBuf);
break;
}

case 6517:
{
break;
}

case 6518:
{
break;
}
}

goto start;

.h文件:

class CUdpSocket
{
public:
CUdpSocket(void);
~CUdpSocket(void);
void ServerRecv(int port);
void ClientSend(const char *ip, int port, const char *buff);
unsigned static __stdcall ServerRecvThread(void *arguments);
unsigned static __stdcall ClientSendThread(void *arguments);
CString static Itoa(int data);
void Mix();

private:
RecvStruct *pRecvData;
SendStruct *pSendData;
vector<HANDLE>threadStl;
static vector<char*>BuffStack1; // Here is my stack vector
static vector<char*>BuffStack2;
static vector<char*>BuffStack3;
HANDLE hThread;
unsigned threadID;
static BufferData *ptrBufferData;
};

我有点迷茫到底要不要放static。当我放置静态时,错误将是:

error LNK2001: unresolved external symbol "private: static class std::vector<char *,class std::allocator<char *> > CUdpSocket::BuffStack1" (?BuffStack1@CUdpSocket@@0V?$vector@PADV?$allocator@PAD@std@@@std@@A)

如果我没有放置静态语句,错误会显示:

error C2228: left of '.push_back' must have class/struct/union

请帮忙。

谢谢。

最佳答案

我认为问题在于在 C++ 中,在类中使用 static 数据成员是一个两步过程。首先,您需要声明 static 变量,表明它有名称和类型,然后您必须定义 static 变量以在其中一个翻译单元中为其提供存储空间。我的猜测是您已经完成了第一步,但还没有完成第二步。

要定义一个 static 变量,将这样的定义放入 .cpp 文件中:

vector<char*> CUdpSocket::BuffStack1;

请注意,您在此处重复static 关键字。相反,您只需提供 static 数据成员的类型和完全限定名称。如果您想为 static 数据成员使用非默认构造函数,您也可以在这里这样做。

希望这对您有所帮助!

附言。请不要使用标签和 goto 来实现您的循环...请改用 while(true) 循环! :-)

编辑:如果您要从线程访问这些vector,请确保您有适当的同步。从多个线程读取和写入一个 vector 是不安全的,不能确保最多一个线程可以在任何时候修改它。

关于c++ - 问题 : Accessing Vector Inside a Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5367867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com