Класс wxThread
Класс wxThread создан для создания новых потоков (точнее наследования от него). Вики, Док.
Новый наследник wxThread
Создам новый класс (File\New\Class) и задам ему имя (для примера TestThread).
Класс необходимо добавить в проект (кликаем Yes на вопрос, после не изменяем параметры кликаем Ок).
Наследуемся от wxThread.
...
#include <wx/thread.h>
...
class TestThread: public wxThread {
...
Класс wxThread обладает виртуальной функцией Entry, которую нам необходимо перегрузить для наших целей. Если говорить проще, то эта функция выполняется внутри отдельного потока, а при ее завершение завершается и сам поток.
...
void* Entry();
...
Ниже представлен листинг заголовочного файла класса TestThread...
void* Entry();
...
#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 (главного потока).
Этот комментарий был удален автором.
ОтветитьУдалитьВот может быть кому пригодиться.
Удалитьhttp://dfiles.ru/files/vcvzgwusx
Исходники простейшего примера взаимодействия потока и GUI.