2013-05-10 3 views
0

У меня есть пример, который описывает, как отправить 1 сокет в качестве параметра в новый поток.Массив сокетов в качестве параметров в CreateThread

SOCKET clientSocket; 
... 

CreateThread(NULL, NULL, SexToClient, &clientSocket, NULL, &thID); 
     ...} 


DWORD WINAPI SexToClient(LPVOID client) { 
    SOCKET clientSocket; 
    clientSocket = ((SOCKET*)client)[0]; 
     ... } 

Но теперь я хочу создать другой поток с массивом сокетов. Как я могу отправить их и использовать в потоке?

А что значит [0] в конце этой строки? В этом конкретном примере мы отправляем только один сокет, и он работает нормально.

((SOCKET*)client)[0]; 

ответ

1

Вы можете передавать аргументы метода CreateThread, обернув все аргументы в простую структуру. Например:

struct ThreadParams { 
    std::vector<SOCKET *> sockets; 
    std::string clientName; 
    // more params 
}; 

Все, что вам нужно сделать, это инициализировать эту структуру перед вызовом функции CreateThread, а затем передать указатель:

ThreadParams * params = new ThreadParams(); 
params.setParameters(); 
CreateThread(, , SexToClient, params,); 

DWORD WINAPI SexToClient(LPVOID arg) { 
    ThreadParams * params = reinterpret_cast<ThreadParams *>(arg); 
    // delete after usage; 
    delete params; 
} 
1

Вы можете вызывать CreateThread столько раз, сколько хотите, используя разные данные, поскольку четвертые параметры и новый поток получат эти данные.

((SOCKET*)client)[0] 

просто захватывает первый элемент. Он отбрасывает его на указатель SOCKET, а затем захватывает первый элемент. Это еще один способ, чтобы написать

*(SOCKET *)client; 
Смежные вопросы