익숙하지 않은 winapi가 포함되어 있기 때문에 올바른 구문이 무엇인지 모르겠습니다. 예를 들어, processClient (LPVOID)에서 processClient (LPVOID &)까지 미리 정의 된 스레드 함수 매개 변수를 xhangethe하게하지 않을 것입니다.C++ - 참조로 CreateThread()에 객체 전달하기
"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);
}
그래서 그냥 당신이 필요로 포인터를 전달 내부 같은 포인터로 변환, 나는 편의를 위해 대신'표준 : thread'을 사용하는 것이 좋습니다,하지만 이미 포인터입니다. – chris
'SOCKET ClientSocket = ((ClientParams *) lpParam) -> sock;'- 기본 C++. 다중 스레드 네트워킹 응용 프로그램이 첫 번째 프로젝트에 가장 적합하지 않을 수도 있습니다. – IInspectable
@IInspectable, 당신은 무효 포인터를 dereferencing하고 있습니다. 어쨌든, 당신은 C를 의미합니다. ++는 void 포인터보다 더 좋은 방법이 있습니다. – chris