我不确定这个的正确语法是什么,因为它涉及我不熟悉的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 );
}
答案 0 :(得分:2)
SOCKET ClientSocket =(SOCKET)* lpParam-> sock; ??不起作用
lpParam具有与传递它时相同的值,在main中,它是'params',类型为'ClientParams *',因此您没有任何业务使用'*'取消引用它。其余部分只是一个优先问题。它应该是
SOCKET ClientSocket=((ClientParams*)lpParam)->sock;
答案 1 :(得分:0)
访问结构成员必须通过结构。
SOCKET ClientSocket=((ClientParams*)lpParam)->sock;