线程的全局函数能成为一个类的成员函数吗?

sky 2003-11-18 11:36:22
我定义了一个创建线程的函数:
int CrtThread()
{

hComWatchThread=CreateThread((LPSECURITY_ATTRIBUTES) NULL,//安全属性
0,//初始化线程栈的大小,缺省为与主线程大小相同

CommProc, //线程的全局函数

0, //此处传入了主框架的句柄

0,

&pThread );

if(hComWatchThread!=NULL)
{
SuspendThread(hComWatchThread);//成功创建则挂起
return 0;
}
else
{
return 1;
}
}

又定义了全局函数DWORD WINAPI CommProc( LPVOID pParam );

现在我希望能够将这两个函数都定义为一个类CbDrv的成员函数,便将此两个函数的生命都加入了类的定义中(.h文件)
int CrtThread();
DWORD WINAPI CommProc( LPVOID pParam );

然后在类的成员函数实现文件(.CPP)文件中实现了这两个函数
int CbDrv::CrtThread();
DWORD WINAPI CbDrv::CommProc( LPVOID pParam );

之后在编译时出错,在以下函数的 (CommProc, //线程的全局函数)处报错

hComWatchThread=CreateThread((LPSECURITY_ATTRIBUTES) NULL,//安全属性
0,//初始化线程栈的大小,缺省为与主线程大小相同

CommProc, //线程的全局函数

0, //此处传入了主框架的句柄

0,

&pThread );

报错的内容为'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'

难道线程的全局函数不能是一个类的成员函数吗,请教各位了?





...全文
46 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky 2003-11-18
  • 打赏
  • 举报
回复
除了静态成员变量还有其他的办法吗,因为我希望在这个线程结束的时候,激发此类的一个事件,而这个事件是无法定义为静态的,还有别的办法吗,非常感谢了!
fulaoxiao3000 2003-11-18
  • 打赏
  • 举报
回复
static
天限天空 2003-11-18
  • 打赏
  • 举报
回复
static
AkiraChing 2003-11-18
  • 打赏
  • 举报
回复
这样子写啊
class DDN
{
public:
bool sen(char a);
static void callback(LPVOID param);
void mcallback(...);
}

//静态函数
void DDN::callback(LPVOID param);
{
DDN* pDDN=(DDN*)param;
return pDDN->mcallback(...);
}

//成员函数
void DDN::mcallback(...)
{
...
//这里可以访问成员变量。
}


这篇文章对你可能有些帮助
http://www.flounder.com/callbacks.htm

xiaohyy 2003-11-18
  • 打赏
  • 举报
回复
处理static就只有全局了。没有其他办法。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧