使用pthread的多个参数(带结构)错误

时间:2013-01-27 17:14:01

标签: c++ struct pthreads arguments

我正在开展一个多客户聊天项目。

这是我的代码:

struct RecvDataModel
{
    int sockAddr;
    char *inData;
};

void *ProcessData(void *arg);

void Client::Recv(int sockAddr, char *inData)
{
    RecvDataModel outData;
    outData.sockAddr = sockAddr;
    outData.inData = inData;
    pthread_t rThr;
    pthread_create(&rThr, NULL, ProcessData, (void*)&outData);
}

void *ProcessData(void *arg)
{
    RecvDataModel *inData = (RecvDataModel*)arg;
    cout << inData->inData << endl;
    return 0;
}

基本上,如果sockAddr(在Client :: Recv中)等于“55”ProcessData的cout函数写入“31784736”,如果等于“0”cout的“5120”

这是我的大问题!没有这个我不能继续! (我正在使用eclipse C ++) 有什么问题?我已经看过一些这样的示例项目:Link >>>

2 个答案:

答案 0 :(得分:3)

您正在将指针传递给RecvDataModel,这是一个函数局部变量。它将超出Client::Recv函数末尾的范围。

尝试使用new分配:

RecvDataModel * outData = new RecvDataModel();
outData->sockAddr = sockAddr;
outData->inData = inData;
pthread_t rThr;
pthread_create(&rThr, NULL, ProcessData, outData);

答案 1 :(得分:2)

不要将指针传递给超出范围的局部变量。一旦你创建了那个线程,outData就不再有效,所以你给它的指针是不好的。您需要使用outData限定符声明static,或者为其动态分配空间,以便在Client::Recv返回时不会消失。