C ++ - 通过ref将对象传递给CreateThread()

时间:2013-12-24 02:05:30

标签: c++ winapi

我不确定这个的正确语法是什么,因为它涉及我不熟悉的winapi。例如,我不知道它不会让我将预定义的线程函数参数从processClient(LPVOID)更改为processClient(LPVOID&)。

我需要通过引用传递“params”对象(就像现在没有问题,即使我不会改变它的值)到线程函数“processClient()”。

... struct(the object) declaration
struct ClientParams{

    ClientParams::ClientParams():sock(INVALID_SOCKET), i(NULL){};

public:
    SOCKET sock;
    int i;
};

... in processClient(LPVOID lpParam){
    SOCKET ClientSocket=(SOCKET)*lpParam->sock; ?? doesnt work
    int i=*lpParam->i; ?? doesn't work
}
... in main{
ClientParams *params = new ClientParams();
params->i=some_value;
params->sock=ClientSocket;
CreateThread(
            NULL,                       // don't inherit handle
            0,                          // use default size for the executable
            processClient,
            (LPVOID)params,             // thread data
            0,                          // run right away
            &i );
}

2 个答案:

答案 0 :(得分:2)

  

SOCKET ClientSocket =(SOCKET)* lpParam-> sock; ??不起作用

lpParam具有与传递它时相同的值,在main中,它是'params',类型为'ClientParams *',因此您没有任何业务使用'*'取消引用它。其余部分只是一个优先问题。它应该是

SOCKET ClientSocket=((ClientParams*)lpParam)->sock;

答案 1 :(得分:0)

访问结构成员必须通过结构。

SOCKET ClientSocket=((ClientParams*)lpParam)->sock;