Win32多线程 线程函数必须为静态的解决方案
2016-10-08 10:23
597 查看
Win32多线程 线程函数必须为静态的解决方案
public:CProgressCtrl m_ctrlProgress;
//线程调用函数 static DWORD WINAPI ThreadFuncRead(LPVOID pcdlg); static DWORD WINAPI ThreadFuncWrite(LPVOID pcdlg);
在头文件中线程函数的定义必须为静态的,但是这样就会出现一个问题,如何调用非静态的变量与函数?
解决方案:在创建线程的时候传入this指针
hThrd1=CreateThread(NULL,0,ThreadFuncRead,this,0,&threadId); //创建一个线程 传入this指针 指向当前这个对象
然后在线程函数中对传入的this指针强转类型,即可使用非静态成员和函数。
DWORD CFileDlg::ThreadFuncRead(LPVOID pcdlg)
{
CFileDlg the=(CFileDlg)pcdlg;
}
在静态函数中是没有默认的this指针的,this指针只存在于普通成员函数中。如果没有显示的传入,静态函数是没有直接使用this指针。
相关文章推荐
- 为什么类中的线程函数必须要声明静态?
- 为什么类中的线程函数必须要声明静态?
- 为什么类中的线程函数必须要声明静态?
- 为什么类中的线程函数必须要声明静态
- 类中的线程函数为什么必须是静态的
- 为什么类中的线程函数必须要声明静态?
- C++ 类非静态成员函数作为线程入口函数实现
- C++类的静态成员函数在多线程的工作机制以及运行过程中强制结束线程实验
- 将类成员函数作为线程入口函数——关于C++ 类静态成员的学习
- 用非静态成员函数作为线程启动函数
- 选择目录,选择文件夹的COM组件问题。在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- 为什么在C++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
- 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- C++回调函数必须为静态函数的原因
- 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- 静态函数 静态数据成员与静态成员函数 为什么虚函数必须是非静态成员函数 构造函数能为static吗?