怎么在静态线程函数里访问其他类的非静态成员函数?

vcokwap 2004-08-12 02:24:47
DWORD WINAPI Cfun::TalkThread(LPVOID p) //静态函数
{

CSBSession pTalkSession;
pTalkSession.Create(); //出错
}
class CSBSession
{
public:
void Create();
};
...全文
135 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
oyljerry 2004-08-12
用"memory_xj(青蛙) "的方法有时容易出错,所以用的时候一定要小心!

既然creat()有问题,就查看一下它
回复
vcokwap 2004-08-12
调用f()没问题

我用其他函数调用确实没问题,确实是调用CAsyncSocket的Create()出问题

但程序启动时也调用了AfxSocketInit(),为什么不能Create呢

class CSBSession : public CAsyncSocket
{
void f()
////
}
回复
vcokwap 2004-08-12
我用"memory_xj(青蛙) "的方法试过,调用begin()进入到TalkThread,Create出错
Cfun.h
class Cfun{
void begin();
CSBSession *pTalkSession;
}

CSBSession.h
class CSBSession
{
public:
void Create();
};


void Cfun::begin()
{

CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)TalkThread,(LPVOID)this,0,0);
}
DWORD WINAPI Cfun::TalkThread(LPVOID p) //静态函数
{
Cfun *dlg= (Cfun *)p;
dlg->pTalkSession =new CSBSession;
dlg->pTalkSession.Create();//出错

}

回复
memory_xj 2004-08-12
在启动线程时:
AfxBeginThread(TalkThread, this, THREAD_PRIORITY_NORMAL);
这里的this指针也可以是其它类型的指针,就是LPVOID p,在TalkThread回调函数中,只需将这个指针相应转型,如CMyView *pView = (CMyView *)p;以下你可以用CMyView中的函数了。
回复
holyeagle 2004-08-12
必须把该类的指针做为参数传入线程(全局变量不赞成),然后用这个指针访问。
回复
vcokwap 2004-08-12
谢谢大家,没搞定,还是换种办法做
回复
holyeagle 2004-08-12
另外,你的Cfun的生命周期是否正确,会不会在线程创建完就析构掉了
回复
holyeagle 2004-08-12
如果create无反应,可以用getlasterror()查错;
如果create时crash,在stack call里面看看什么地方出错.

这种调用方式没有问题,只要使用的时候类型正确
回复
Kudeet 2004-08-12
http://search.csdn.net/Expert/topic/2562/2562896.xml?temp=.3998529
回复
flyelf 2004-08-12
GetLastError()看看是什么问题
回复
DentistryDoctor 2004-08-12
上面说是是语法上的问题,无是Socket创建无法成功,则应该创建调用AfxSocketInit,AfxSocketInit针对每个创建Socket的线程都应该调用
回复
howtotell 2004-08-12
没有对其他类的控件操作,一般这样都是不会出错的.
memory_xj(青蛙)的方法是可行的,不过最好在前面加一个static_cast
CMyView *pView = static_cast<CMyView *>(p);
回复
DentistryDoctor 2004-08-12
你需要的是前置声明,根据怎么传递参数无关。
class CSBSession ;
DWORD WINAPI Cfun::TalkThread(LPVOID p) //静态函数
{

CSBSession pTalkSession;
pTalkSession.Create(); //出错
}
class CSBSession
{
public:
void Create();
};
回复
nonocast 2004-08-12
把指针作为参数传进去
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-12 02:24
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……