Я не уверен, какой правильный синтаксис для этого, потому что он включает winapi, с которым я не знаком. Например, я не знал, что это не позволит мне xhangethe предопределенные параметры функции потока от processClient (LPVOID) к processClient (LPVOID &).
Мне нужно передать объект "params" по ссылке (просто потому, что на данный момент проблем нет, даже если im не собирается изменять значения в нем) для функции потока "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 );
}
SOCKET ClientSocket = (SOCKET) * lpParam-> носок; ?? не работает
lpParam имеет то же значение, что и при его передаче, в основном, где это были "params", типа "ClientParams", поэтому у вас нет никакого бизнеса, разыгрывающего его с помощью "*". Остальная часть - это просто проблема с приоритетом. Должен быть
SOCKET ClientSocket=((ClientParams*)lpParam)->sock;
Элементы структуры доступа должны через структуру.
SOCKET ClientSocket=((ClientParams*)lpParam)->sock;
std::thread
для простоты, но это уже указатель, поэтому просто передайте указатель на то, что вам нужно, и преобразуйте его в тот же указатель внутри.SOCKET ClientSocket = ((ClientParams*)lpParam)->sock;
- базовый C ++. Возможно, многопоточное сетевое приложение не совсем подходит для первого проекта.