C ++ - Передача объекта в CreateThread () по ссылке

0

Я не уверен, какой правильный синтаксис для этого, потому что он включает 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 );
}
  • 0
    Я предлагаю вместо этого использовать std::thread для простоты, но это уже указатель, поэтому просто передайте указатель на то, что вам нужно, и преобразуйте его в тот же указатель внутри.
  • 0
    SOCKET ClientSocket = ((ClientParams*)lpParam)->sock; - базовый C ++. Возможно, многопоточное сетевое приложение не совсем подходит для первого проекта.
Показать ещё 18 комментариев
Теги:
winapi

2 ответа

2
Лучший ответ

SOCKET ClientSocket = (SOCKET) * lpParam-> носок; ?? не работает

lpParam имеет то же значение, что и при его передаче, в основном, где это были "params", типа "ClientParams", поэтому у вас нет никакого бизнеса, разыгрывающего его с помощью "*". Остальная часть - это просто проблема с приоритетом. Должен быть

SOCKET ClientSocket=((ClientParams*)lpParam)->sock;
  • 0
    Спасибо! Параметры пустоты в винапе смутили меня.
0

Элементы структуры доступа должны через структуру.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню