启动类函数作为失去引用的线程



我正在开发一个Windows程序,该程序在线程中完成艰苦的工作 并且GUI保持在主循环中(在这种情况下,我使用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++ 和 x64 Windows 上的 mingw 使用 C++11 开关编译并使用 -mWindows 链接

你正在传递指向局部变量 (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

最新更新