воскресенье, 19 февраля 2012 г.

Кроссплатформенные потоки?

Многопоточность одна из важнейших технологий применяемых в сложных приложениях. Не хочу вдаваться в подробности теории, а попробую описать создание потоков с wxWidgets (далее wxw).


Класс wxThread
Класс wxThread создан для создания новых потоков (точнее наследования от него). Вики, Док.

Новый наследник wxThread
Создам новый класс (File\New\Class) и задам ему имя (для примера TestThread).
Класс необходимо добавить в проект (кликаем Yes на вопрос, после не изменяем параметры кликаем Ок).
Наследуемся от wxThread.
...
#include <wx/thread.h>
...
class TestThread: public wxThread {
...
Класс wxThread обладает виртуальной функцией Entry, которую нам необходимо перегрузить для наших целей. Если говорить проще, то эта функция выполняется внутри отдельного потока, а при ее завершение завершается и сам поток.
...
void* Entry();
...

Ниже представлен листинг заголовочного файла класса TestThread
#ifndef TESTTHREAD_H
#define TESTTHREAD_H


#include <wx/thread.h>


class TestThread: public wxThread {
    public:
        TestThread();
        virtual ~TestThread();


        void* Entry();
    private:
};


#endif // TESTTHREAD_H


Приводить листинг cpp файла бессмысленно.

Вызов потока
Что бы вызвать новый поток необходимо создать экземпляр класса и вызвать функцию Entry методами wxThread.
Первым делом в файле testMain.h (заголовочный файл wxFrame наследника) приинклудим наш класс
...
#include "TestThread.h"
...


Теперь опишем указатель в секции Private
...
TestThread* tThr;
...

В файле testMain.cpp первой функцией выполняется конструктор класса. В конец это функции запишем создание нашего потока и его вызов.
...
    tThr = new TestThread();
    tThr->Create();
    tThr->Run();
...


Вот и все. Наш поток был вызван, а так как функция Entry пуста и завершилась, поток так же завершился. В следующий раз я попробую разобраться взаимодействие потоков и gui (главного потока).







2 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. Вот может быть кому пригодиться.
      http://dfiles.ru/files/vcvzgwusx
      Исходники простейшего примера взаимодействия потока и GUI.

      Удалить