2016-12-10 4 views
0

У меня возникли проблемы с созданием пула потоков. Я постоянно получаю предупреждение:Ошибка при создании потоков. warning: передать аргумент 3 из 'pthread_create' из несовместимого типа указателя

warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type 

Я искал вопросы, но ни один из них не решил проблему для меня. Вот код, я использую для создания темы

for(j=2;j<THREADNUMBER+2;j++){ 
    id[j] = j; 
    if(pthread_create(&thread_array[j],NULL,requestHandler,(void*)id[j])!=0){ 
     perror("Error creating thread "); 
    } 
} 
+0

Просьба показать подпись функции для 'requestHandler()'. – e0k

+0

Я думаю, что это важная часть void * requestHandler (void * n) –

+0

Хм .. Возможно, парсер исказил ваш комментарий. Пожалуйста, используйте backquotes вокруг сегментов кода. Является ли подпись 'void requestHandler (void n)' или 'void * requestHandler (void * n)'? – e0k

ответ

0

От man pages:

#include <pthread.h> 

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
         void *(*start_routine) (void *), void *arg); 

компилировать и компоновать с -pthread.

Третий аргумент является указателем на функцию, которая возвращает void * и принимает один аргумент типа void *. Используя только общее значение указателя типа void * (т. Е. Адрес памяти) в качестве аргумента и типа возвращаемого значения, это функция, которая может (хотя бы косвенно) принимать что-либо в качестве аргумента и возвращать в результате адрес чего-либо. Это делает его довольно общей функцией, но все же имеет фиксированную сигнатуру функции.

Ваша функция requestHandler() не соответствует этой подписи. Убедитесь, что ваш requestHandler() принимает ровно один аргумент типа void * и возвращает void *. Он должен выглядеть примерно так:

void *requestHandler(void *arg) { 
    ... 
} 
+0

, это было то, что у меня было до этого, и оно не работало, но теперь это происходит ... –

 Смежные вопросы

  • Нет связанных вопросов^_^