Как я могу избавиться от этого c предупреждением? - PullRequest
0 голосов
/ 19 мая 2011

Здесь sock_client - это сокет:

LaunchThread(proxy_handlereq, sock_client);    

static void LaunchThread(int (*func)(), void *parg)
{
#ifdef WINDOWS
    LPDWORD         tid;
    CreateThread(NULL, 0L, (void *)func, parg, 0L, &tid);
#else
    pthread_t               pth;
    pthread_create(&pth, NULL, func, parg);
#endif    
}

Я получаю следующее предупреждение: warning: cast to pointer from integer of different size

Как передать его как второй параметр LaunchThread?

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Попробуйте:

LaunchThread(proxy_handlereq, (void*)sock_client);

Редактировать:

Хорошо, теперь я вижу: sock_client - это просто целое число порта.И вы хотите передать этот номер другому потоку, верно?

(в зависимости от размера указателя в вашей системе) вы можете избавиться от предупреждения с помощью этого грязного преобразования:

LaunchThread(proxy_handlereq, (void*)(0xFFFFFFFFFFFFFFFF & sock_client);

Но на самом деле я бы порекомендовал вам создать структуру данных со всей информацией, которую вы хотите передать другому потоку, например:

struct MyData {
    int socket_no;
    const char* host_name;
    ...
};

Затем создать экземпляр этого и передать указатель наэкземпляр вашей функции LaunchThread.


Edit2:

Вы можете увидеть пример кода в этом вопросе: Несколько аргументов функции, вызываемой pthread_create ()?

0 голосов
/ 19 мая 2011

Если sock_client - сокет, вам нужно вызвать LaunchThread как:

LaunchThread(proxy_handlereq, &sock_client);

потому что и CreateThread, и pthread_create ожидают указатель на аргумент для передачи func().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...