У меня есть класс, который содержит функции, которые нужно запускать как потоки. Правильный способ сделать это (сформировать то, что я понимаю) означает, что эти функции объявлены как статические. Чтобы использовать методы из этого класса, мне нужен a, чтобы иметь экземпляр для этого класса, поэтому я создаю статическую переменную, инициализированную self в конструкторе. Каковы последствия эффективности и логики программ?Каковы последствия наличия статического указателя на это
class Foo
{
private: Foo* this_instance;
Foo()
{
this_instance=this;
}
void FooBar()
{
...
}
static void* Bar()
{
if (this_instance==NULL) return 1; //throws are not catched are they?
this_instance->FooBar();
return 0;
}
}
Недействительный код, но чтобы уточнить мой вопрос.
Приложение действительно работает, и я проверил его с помощью helgrind/memcheck, и ошибки не связаны с проблемой. Я задаю этот вопрос, потому что все решения выглядят как обходные пути, в том числе и этот. Другие подобны тому, что упоминается врачом, другие используют вспомогательный статический метод.
Мне интересно, может ли мой подход привести к эпическим неудачам в какой-то момент времени, по какой-то причине неизвестным мне и очевидным для других более опытных программистов.
Статическая переменная не является хорошим подходом - что делать, если вы одновременно используете несколько объектов этого класса? Другим подходом является передача 'this' в качестве параметра вашей точки ввода потока. – Nbr44
Можем ли мы использовать C++ 11? – doctorlove
@doctorlove Класс больше похож на сервер, который слушает некоторые события. Несмотря на то, что я не добавлял защиту от нескольких экземпляров (например, this_instance check in constructor), я использую его как один экземпляр. Компилятор на моей системе не использует C++ 11 (gcc 4.3.4), это компилятор по умолчанию на сервере, где будет развернуто приложение. – LucianMLI