创建一个线程函数为类的成员的线程,没有对象,但是又要用到类里面的其他变量。

                                     创建一个线程,这个线程需要用到类成员变量

如果我们简单的使用静态变量,相当于全局变量,可以调用这个函数最为线程函数,但是在函数内部我们无法使用其他类的成员。

如果不定义静态变量有无法创建这个线程。

解决方法:

(线程是在类里面的函数中创建)

1创建一个线程,线程函数为类public成员,参数设置为this。

hThread6= CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)progresss,(LPVOID)this,0, &ThreadID);  

2在类里面把这个public声明为静态成员。

 static void  progresss(LPVOID lpParameter);

3在.cpp里面定义这个函数(也可以在声明的地方定义,但是在外部定义,可重入)

4由于此时无法使用类成员,因此想要的代码无法实现,所以函数内部得这么写
    CusbbootloaderDlg * pTaskMain = (CusbbootloaderDlg *) lpParameter;   //把this指针传进来
     pTaskMain->my_accept(lpParameter);my_accept(lpParameter)在public声明

上面线程的参数指针this指向的是这个类,把这个指针强制提取,然后指向另一个类成员函数,在这个函数的定义里面就可以使用你想用的所有成员变量了。

亲身实践绝对可行

总结

线程函数首先在类中声明
_beginthreadex( NULL, 0, yourfunc, this, 0, 0 );
(this指向类本身,比如是C**Dlg类)

线程函数UINT C**Dlg::yourfunc(void * pParam)中,pParam就为C**Dlg指针
通过强制转换提取:C**Dlg *p = (C**Dlg*)pParam;中的p就得到对应指针
之后通过p->就可以直接调用C**Dlg类中所使用的所有参数和函数(当然需要使用的参数必须在类中new过并赋值之后才能使用,参数使用完毕之后别忘了delete来释放开辟的内存) 

你可能感兴趣的:(嵌入式,c++,线程)