在成员函数中如何定义回调函数,以便在多线程的情况下进行工作(200分)

  • 主题发起人 主题发起人 BJ_QQ
  • 开始时间 开始时间
B

BJ_QQ

Unregistered / Unconfirmed
GUEST, unregistred user!
在外部调用我定义的类,在我定义的类中含有一个回调函数,由于我的调用者是个多线程的,所以,我在定义回调函数的时候Static会产生问题,恳请各位大富翁们,能否给点什么建议,以便我能顺利解决这个问题,200分不多,要是能够解决问题另有重谢!!!
 
将回调函数改为递归函数,这样可以避免多线程调用的冲突!
 
在线程中定义如TNotifyEvent之类的句柄,创建线程时将回调函数传入。
回调函数内若访问共享资源,应考虚线程安全。
由于VCL不是线程安全的,线程中若使用与VCL相关的代码,应同步到主线程。
有些应用不能在子线程内进行,可以通过消息传递的方式(PostMessage而不是SendMessage)执行回调。
另:cnzhw007:
你知道什么是回调函数,什么是递归函数?
 
不好意思,我刚才忘了说了,该应用程序不仅基于windows,他采用的不是mfc,也不是用vcl,应该是应用STL,我是刚进入这个项目组,这套东西应该是在sun下边工作的。有些事情还是糊里糊涂的,问题的提出也有点含糊,有什么不清楚的我尽可能说清楚,。请各位帮帮忙了:)[:)]
 
学习学习
 
我在Linux下用C++做过多线程应用,回调采用函数指针传递,没什么问题。
 
给回调函数(static)传一个参数,参数值是实例指针,通过它来调用实例函数(非static)
 
楼上这个方法适用于多线程多实例呢?能不能具体点?

能不能有更对象化的设计思路?我听说可以用一个纯虚类,来实现?
 
采用纯虚类,主要是为了在实现端和应用端定义一个接口标准,实现端从纯虚类中继承,并实现基类中的方法,而应用端按纯虚里的类定义调用实现端完成功能.
楼主提出的方式,即是用要用传递类指针的方式实现回调.
对于多线程回调的应用可以按以下思路进行:
1.接口标准
class TCallbackInterface
{
public:
virtual int foo() = 0;
};
2.被线程调用的模块
class TInterfaceImp : public TCallbackInterface
{
public:
virtual int foo();
};
int TInterfaceImp::foo()
{
// 进入临界

// 完成功能
.......
// 退出临界
}
4.启动线程的模块
TInterfaceImp* Intf = new TInterfaceImp;

//建立线程xxx
....

// 传递回调接口
xxx->SetCallBackIntf(Intf);

3.线程
class TMyThread
{
private:
TCallbackInterface *Intf;
protected:
intdo
Callback();
public:
void SetCallBackIntf(TCallbackInterface* intf);
};
void TMyThread::SetCallBackIntf(TCallbackInterface* intf)
{
Intf = intf;
}
int TMyThread::DoCallback()
{
int res = -1;
try
{
if( Intf )
res = Intf->foo();
}
catch(...)
{
}
return res;
}
 
多人接受答案了。
 
后退
顶部