Я пытаюсь спроектировать активный объект такого рода, который когда-то был создан, по сути, работает в своем собственном потоке.Пока что я создал класс, который содержит переменную экземпляра pthread, а затем в конструкторе для этого класса он должен отправить pthread на своем пути.
Поскольку pthread_create () принимает параметры функции,Я передаю ей функцию run (), которую я установил в своем файле реализации класса.
На данный момент моя функция run () не является частью класса, она просто находится в файле реализации, нокогда я пытался скомпилировать его, я получаю сообщение об ошибке:
"error: ‘run’ was not declared in this scope"
Теперь я понимаю, почему функция run () выходит из области видимости, но было бы правильно просто добавить run () в мой активныйкласс объекта как частная функция, или это вызовет другие проблемы, если существует более одного из этих объектов?Черт, это вызовет проблемы только с одним из них?
Хорошо, вот код, я просто не думал, что он имеет большое значение.Вот MyClass.hpp
class MyClass {
private:
pthread_t thread;
ObjectManager *queue;
int error;
// just added this, but the compiler still doesn't like it
void *run(void *arg);
public:
MyClass();
~MyClass();
void start();
}
А вот реализация, MyClass.cpp:
#include "MyClass.hpp"
void MyClass::start() {
if (queue == NULL)
return;
int status = pthread_create(&thread, NULL, run, (void *) queue);
if (status != 0) {
error = status;
return;
}
}
void *MyClass::run(void *arg) {
bool finished = false;
while (!finished) {
// blah blah blah
}
return NULL;
}