要疯了,倾小弟我所有100分,悬赏这个有关问题的解决方法,关于线程创建的!多谢了
要疯了,倾我所有100分,悬赏这个问题的解决办法,关于线程创建的!谢谢了!
在头文件里面声明了线程函数:DWORD WINAPI Function_Login();
在cpp文件里面对Function_Login()进行了定义,函数体里面引用的很多变量都是非静态变量。
于是问题就来了,当我创建线程的时候:
HANDLE ThreadHandle;
ThreadHandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Function_Init,0, 0, NULL);
编译不通过:
“类型转换”: 无法从“overloaded-function”转换为“LPTHREAD_START_ROUTINE”,原因我想是因为我的线程函数DWORD WINAPI Function_Login()没有声明为static,因为线程函数必须是全局的或静态的,但是如果把Function_Init声明为static,即:
static DWORD WINAPI Function_Login()
问题就来了,因为函数Function_Login()里面引用的太多变量都是非静态的,这样编译的话就会有几十上百个错误,把这些所有被引用的变量前面都加上static是绝对不现实的,看了一些资料说通过this指针的形式可以静态函数引用非静态的变量还是怎么的,小弟不会操作啊,跪求哪位大大给我解决这个问题,100分就是你的了!
牛人都是有个性的,我写了这么多你们估计也看烦了,我把问题归纳一下吧:
线程函数需为全局或静态,但是我的线程函数里面又无可避免地引用一些非静态变量,如何实现静态线程函数引用非静态变量?
------解决方案--------------------
ThreadHandle = CreateThread(this,0,(LPTHREAD_START_ROUTINE)Function_Init,0, 0, NULL);
static DWORD WINAPI Function_Login(LPVOID lpParameter)
{
CMyClass *pMy=(CMyClass *)lpParameter;
pMy->类成员变量(非静态);
}
------解决方案--------------------
楼上正解,这是一种常规的作法,把自己需要处理的对象的指针传递给线程函数,进而访问指针对象的成员或接口
------解决方案--------------------
2楼正解,把要用的变量集成到一个类或结构中,一起传进去就可以了。祝好。。。。。
在头文件里面声明了线程函数:DWORD WINAPI Function_Login();
在cpp文件里面对Function_Login()进行了定义,函数体里面引用的很多变量都是非静态变量。
于是问题就来了,当我创建线程的时候:
HANDLE ThreadHandle;
ThreadHandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Function_Init,0, 0, NULL);
编译不通过:
“类型转换”: 无法从“overloaded-function”转换为“LPTHREAD_START_ROUTINE”,原因我想是因为我的线程函数DWORD WINAPI Function_Login()没有声明为static,因为线程函数必须是全局的或静态的,但是如果把Function_Init声明为static,即:
static DWORD WINAPI Function_Login()
问题就来了,因为函数Function_Login()里面引用的太多变量都是非静态的,这样编译的话就会有几十上百个错误,把这些所有被引用的变量前面都加上static是绝对不现实的,看了一些资料说通过this指针的形式可以静态函数引用非静态的变量还是怎么的,小弟不会操作啊,跪求哪位大大给我解决这个问题,100分就是你的了!
牛人都是有个性的,我写了这么多你们估计也看烦了,我把问题归纳一下吧:
线程函数需为全局或静态,但是我的线程函数里面又无可避免地引用一些非静态变量,如何实现静态线程函数引用非静态变量?
------解决方案--------------------
ThreadHandle = CreateThread(this,0,(LPTHREAD_START_ROUTINE)Function_Init,0, 0, NULL);
static DWORD WINAPI Function_Login(LPVOID lpParameter)
{
CMyClass *pMy=(CMyClass *)lpParameter;
pMy->类成员变量(非静态);
}
------解决方案--------------------
楼上正解,这是一种常规的作法,把自己需要处理的对象的指针传递给线程函数,进而访问指针对象的成员或接口
------解决方案--------------------
2楼正解,把要用的变量集成到一个类或结构中,一起传进去就可以了。祝好。。。。。