Запуск функций класса как потоков, теряющих ссылку

я работаю над программой Windows, которая делает тяжелую работу в потоках
и графический интерфейс остается в основном цикле (в этом случае я использую ImGui OpenGL3)

но с реализацией большего количества функций параметры выходят за рамки
при запуске work_thread
и функция, запускаемая beginthread, получает указатель, показывающий NULL
(на самом деле не изменение кода, а включение другой библиотеки провоцирует это)

что происходит и как предотвратить это

здесь сырая репрезентация моего кода

#include <process.h>class JOBS
{
public:
void jobA(char *path);

};

void JOBS::jobA(char*path) {   . .     }class APP_DATA
{
public:
JOBS jobs;

public:
char *path;
};void job_a_threadstarter(void* pParams )
{
APP_DATA *app=*(APP_DATA **)  pParams;

app->jobs.jobA(app->path);
}void job_starter(APP_DATA *app)
{
_beginthread(job_a_threadstarter,0,&app);
}int main(int, char**)
{
APP_DATA app;
char workpath[99]="path_to_somewhere";

.
.

app.path=workpath;
job_starter(&app);.
.
}

обычно код выполняется без проблем,
но некоторые изменения в других подпрограммах и job_a_threadstarter дают сбой, так как pParams ссылается на NULL

я использую GNU G ++ с mingw на x64 Windows
компиляция с ключом c ++ 11 и компоновка с -mwindows

0

Решение

Вы передаете указатель на локальную переменную (app) который разрушается когда job_starter концы

_beginthread(job_a_threadstarter,0,&app); // you are getting pointer to local variable

заменить его на

_beginthread(job_a_threadstarter,0,app); // forward pointer to app
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector