Форум программистов, компьютерный форум CyberForum.ru

Thread class - C++

Восстановить пароль Регистрация
 
deniswhite8
Сообщений: n/a
03.02.2013, 21:30     Thread class #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();
ну думаю понятно, такая схема чуть ли ни везде используется
Собственно вопрос как это реализовать. Сам пытался, гуглил, но не понял как передать в библиотечную функцию указатель на метод класса конкретного объекта изнутри О_о.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 21:30     Thread class
Посмотрите здесь:

C++ std::thread
Секундомер и thread-safe C++
thread-safe ли? C++
библиотека thread C++
C++ C++11 thread производитель-потребитель
C++ Thread в объекте
C++ Массив потоков <thread>
Vector и thread-safe C++
Std::thread в классе C++
Добавление thread в вектор C++
C++ Указатели и std::thread
C++11. thread, mutex, thread-safety C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
03.02.2013, 23:42     Thread class #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;
    }
};
Но это просто возможность выполнять код в виртуальных функциях в отдельном потоке.
В классе конечно же нужно делать правильный деструктор, запретить копирование, проверки всякие и прочие нужные вещи сделать.
Yandex
Объявления
03.02.2013, 23:42     Thread class
Ответ Создать тему
Опции темы

Текущее время: 14:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru