关于回调函数中参数传递的有关问题,多个同时执行的相同回调函数如何传递不同的参数内容
关于回调函数中参数传递的问题,多个同时执行的相同回调函数怎么传递不同的参数内容?
如这样的情况:
class CA
{
static char *buf;
//设备驱动回调函数,允许多个设备同时使用
static DWORD funcallback(...);
};
char CA::buf = NULL;
CA::CA()
{
buf = new char[max_buf];
}
DWORD CA::funcallback(...)
{
memcpy( buf, x, size );
.....
}
如果我是这么做的话就有麻烦了:
class CMainDlg : public CDialog
{
public:
CA a[5];//同时声明5个表示有5个设备同时启动
BOOL init();
}
BOOL CMainDlg::init()
{
for( int i = 0; i < 5; i++ )
a[i].start();
}
由于在上面的代码中CA的成员buf是全局的,那么在构造中分配的内存实际只保留了最后一次分配的,也就是这5个回调共享了一个缓冲,这肯定是错误的,而且会有内存泄漏,请问象这样的情况如何解决?
------解决方案--------------------
可以考虑下多线程,这样实现还是比较方便的 。
------解决方案--------------------
在 funcallback 函数里面分配内存就没这个问题了
------解决方案--------------------
既然每个设备独立同时工作,就不应该把buf定为static类型,每个实例自己分配内存
------解决方案--------------------
对,不应该声明参数为static全局变量。
应该
static DWORD funcallback( char *pParam1,char *pParam2,..........);
回 "在回调和程序中都直接使用 "
可以通过参数返回值嘛。
------解决方案--------------------
把要共享的信息都放在一起,比如一个结构,或者一个类。比如一个buf,一个hdr。
typedef struct _tag_share_info
{
_tag_share_info()
{
//init
}
char buf[max_buf];
HDRVR hdr;
}SHARE_INFO_T;
class CA
{
SHARE_INFO_T share_info;
//设备驱动回调函数,允许多个设备同时使用
static DWORD funcallback((void*)&share_info, ..);
};
如这样的情况:
class CA
{
static char *buf;
//设备驱动回调函数,允许多个设备同时使用
static DWORD funcallback(...);
};
char CA::buf = NULL;
CA::CA()
{
buf = new char[max_buf];
}
DWORD CA::funcallback(...)
{
memcpy( buf, x, size );
.....
}
如果我是这么做的话就有麻烦了:
class CMainDlg : public CDialog
{
public:
CA a[5];//同时声明5个表示有5个设备同时启动
BOOL init();
}
BOOL CMainDlg::init()
{
for( int i = 0; i < 5; i++ )
a[i].start();
}
由于在上面的代码中CA的成员buf是全局的,那么在构造中分配的内存实际只保留了最后一次分配的,也就是这5个回调共享了一个缓冲,这肯定是错误的,而且会有内存泄漏,请问象这样的情况如何解决?
------解决方案--------------------
可以考虑下多线程,这样实现还是比较方便的 。
------解决方案--------------------
在 funcallback 函数里面分配内存就没这个问题了
------解决方案--------------------
既然每个设备独立同时工作,就不应该把buf定为static类型,每个实例自己分配内存
------解决方案--------------------
对,不应该声明参数为static全局变量。
应该
static DWORD funcallback( char *pParam1,char *pParam2,..........);
回 "在回调和程序中都直接使用 "
可以通过参数返回值嘛。
------解决方案--------------------
把要共享的信息都放在一起,比如一个结构,或者一个类。比如一个buf,一个hdr。
typedef struct _tag_share_info
{
_tag_share_info()
{
//init
}
char buf[max_buf];
HDRVR hdr;
}SHARE_INFO_T;
class CA
{
SHARE_INFO_T share_info;
//设备驱动回调函数,允许多个设备同时使用
static DWORD funcallback((void*)&share_info, ..);
};