Проблема в том, что pthread_create
- это функция C, а не C ++, поэтому использование ее из C ++ может быть сложным. Третий аргумент должен быть указателем function , но вы пытаетесь вызвать его с указателем method , что не одно и то же.
C ++ допускает неявное преобразование указателя метода stati c в указатель на функцию, так что вы можете делать с этим все, что хотите (вот почему вы получаете сообщение о том, что 'task' не является stati c - потому что если это так, его можно преобразовать в указатель на функцию и использовать). Обычно вы затем используете 4-й аргумент для хранения «this», поэтому вы можете затем вызывать не-stati c метод из stati c method
class Foo
{
void assingTask()
{
pthread_t myThread;
int i;
pthread_create(&myThread, NULL, start_task, this)
}
static void *start_task(void *this_) {
return static_cast<Foo *>(this_)->task();
}
void * task()
{
//DO Stuff
}
};
Приведенный выше код имеет проблему, с которой вы " потерять дескриптор pthread_t (не храните его где-либо доступным), поэтому вы не можете присоединиться или отсоединиться от потока, но это можно исправить многими способами.