deniswhite8
1

Thread class

03.02.2013, 21:30. Показов 789. Ответов 1
Метки нет (Все метки)

В библиотеке SDL есть функция:
C++
1
SDL_Thread *SDL_CreateThread(int (*fn)(void *), void *data);
Эта функция запускает в отдельном потоке переданную ей функцию, и возвращает указатель на поток. Но не суть. А суть в том, что я хочу обернуть это дело в класс Thread, например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass : public Thread
{
private:
    virtual void run()
    {
        //тут то, что должно быть запущено в отдельном потоке 
    }
};
 
...
 
MyClass mc;
mc.start();
ну думаю понятно, такая схема чуть ли ни везде используется
Собственно вопрос как это реализовать. Сам пытался, гуглил, но не понял как передать в библиотечную функцию указатель на метод класса конкретного объекта изнутри О_о.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2013, 21:30
Ответы с готовыми решениями:

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i = Bullets.begin(); i !=...

Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list"
Не могу сообразить почему возникает ошибка. У меня в классе есть метод, который должен работать в...

C++11. thread, mutex, thread-safety
есть функция, которая стартует 2 потока: для отлова нажатия клавиш и для выполнения действий void...

Boost::thread vs std::thread
Доброго времени суток, решил углубить свои знания, и решил почитать про потоки, бустовые и те что в...

1
DU
1495 / 1141 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
03.02.2013, 23:42 2
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class MyClass : public Thread
{
  SDL_Thread* m_thread;
public:
   void start()
   {
      m_thread = SDL_CreateThread(&MyClass::execute, this);
   }
 
private:
    virtual void run()
    {
        // тут то, что должно быть запущено в отдельном потоке 
        // точнее будет, если говорить что то, что тут выполняется - выполняется в другом потоке.
    }
 
    static int execute(void* instance)
    {
       MyClass* myClass = static_cast<MyClass*>(instance);
       myClass->run();
       return 0;
    }
};
Но это просто возможность выполнять код в виртуальных функциях в отдельном потоке.
В классе конечно же нужно делать правильный деструктор, запретить копирование, проверки всякие и прочие нужные вещи сделать.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2013, 23:42

Работа с class ами. Заполнение дин. массива типа class
Всем доброго времени суток! Это моя первая тема на этом сайте, поэтому если что извините меня (за...

Create a programm that creates an object of created class Time and tests the member functions of class
Time Class Create a class called Time that might be used to represent time. 1. Your...

Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a )
Плиз помогите. Не знал, что я такой чайник.) Итак: есть два класса: CMyClass.h...

Как вызвать функцию class A, из функции class B
Как вызвать функцию class A, из функции class B К примеру Class A{ public: int a,b; void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.