Пытаюсь передать параметры, с 1 параметром работает нормально, но когда передаю через структуру этот же параметр - получается что передается не то значение...
вариант 1 рабочий..
int* csock;
sockaddr_in sadr;
int addr_size = sizeof(SOCKADDR);
while(true){
printf("waiting for a connection\n");
csock = (int*)malloc(sizeof(int));
if((*csock = accept( listenfd, (SOCKADDR*)&sadr, &addr_size))!= INVALID_SOCKET ){
printf("\nReceived connection from %s\n",inet_ntoa(sadr.sin_addr));
CreateThread(0,0,&SocketHandler, (void*)csock , 0,0);
}
else{
fprintf(stderr, "Error accepting %d\n",WSAGetLastError());
}
}
DWORD WINAPI SocketHandler(void* lp){
int *csock = (int*) lp;
Вот, это работает.
1 заход в цикл While, первый вызов csock = (int*)malloc(sizeof(int)); ( 0x00366be0 = -842150451)
далее вызов *param.csock = accept.. и по этому адресу(0x00366be0) присваивается значение 3992
2 заход в цикл вызов csock = (int*)malloc(sizeof(int)); ( 0x00366b20 = -842150451)
но при *param.csock = accept.. отладчик сразу переходит в код созданного потока.
в потоке csock = (int*)malloc(sizeof(int)); получает 0x00366be0 = 3992
то адрес из 1 захода цикла...
вариант 2
struct tagParam
{
int* csock;
char* file;
};
CreateThread(0,0,&SocketHandler, ¶m, 0,0);
1 заход в цинкл *csock получает 0x00366be0 = 3992 (все также)
2 заходи в цкикл *csock получает 0x00366b20 = -842150451
в потоке int *csock = (int*)param->csock; но получает 0x00366b20 = -842150451)
то есть.. передав адрес структуры.. но в ней изменилось значение... как-то так..
как правильно сделать? уф надеюсь смысл донес..
мм то есть надо не адрес структуры передать.. а саму структуру копию.. наверн..
Добавлено через 6 минут и 51 секунду:сделал ... хитрожопно работает но хотелось бы по нормальном