Так что я пытаюсь выяснить, можете ли вы использовать любопытно повторяющийся шаблон шаблона, чтобы обойти ограничения использования pthread с помощью методов класса и даже создания классов, делая что-то вроде этого.Любопытно повторяющийся шаблон с ptrhead
template <class T>
class thread_helper
{
static void* create(void *input)
{
T * output=new T;
return static_cast<void*>(output);
}
static void* using(void *input)
{
T::use(input);
}
};
class user : public thread_helper<user>
{
void method(int x)
{
//does something
}
static void use(void* input)
{
this->method(static_cast<int>(input));
}
};
Затем вы можете использовать PTHREAD назвать создание класса с использованием
pthread_create(thread_variable, NULL, thread_helper::create<some_class>, void);
и для другого вызова
pthread_create(thread_variable, NULL, user::using(), void);
примечание: Есть много ошибок в коде выше. Пожалуйста, не раздирайте меня. Я действительно просто пытаюсь нарисовать картину того, что я пытаюсь сделать. Я также пытаюсь выяснить, есть ли лучший способ сделать эту операцию.
Кроме того, второй метод pthread_create
действительно необходим, я не могу использовать конструктор для этого тоже?
Использование зарезервированного слова. Во всяком случае, типичная парадигма заключается в том, чтобы указать ваш экземпляр экземпляра класса void * и передать это как параметр потока для процедуры потока, которая возвращает его в качестве одного и того же указателя. Если у вас есть C++ 11, рассмотрите использование std :: thread. –
«если есть лучший способ выполнить эту операцию» - запуск конструктора в отдельном потоке не всегда полезен, если у вас нет синхронизированного способа доступа к объекту после этого - я предлагаю вам прочитать ['std :: future '] (http://en.cppreference.com/w/cpp/thread/future) и др. –
@TonyD Я проверил std :: future. Меня раздражает то, что я не могу использовать новый стандарт для этого проекта. Я также согласен с вами в том, что часть конструктора на самом деле не нужна. В любом случае, я получил код, который работает, и он работает, но его тонна кодовой таблички. –