CreateThread中的线程函数可以是一个类的函数吗?

rushing 2002-03-18 12:43:46
在类的内部创建线程,线程函数也是类的一个函数。
但是编译时却出错。
如果把线程函数放在类外面,就没事了。
请高手指教。
...全文
234 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
scklotz 2002-03-18
  • 打赏
  • 举报
回复
csdn 怎么使用这么变态的字体。
scklotz 2002-03-18
  • 打赏
  • 举报
回复
必须使用静态成员函数(static)来做线程函数。
-------^^^^^^^^^^^--------------------
LLnju 2002-03-18
  • 打赏
  • 举报
回复
同意 mahongxi(烤鸡翅膀)(0.618)
mahongxi 2002-03-18
  • 打赏
  • 举报
回复
因为线程函数要求特定的函数形式参数,而你的普通成员函数往往函有一个隐形参数CYourClass * this,所以普通的成员函数是不行的,
如果一定要以成员函数形式出现,在前面加上static
robothn 2002-03-18
  • 打赏
  • 举报
回复
少定义一个static func,好
调用时
AfxBeginThread(aaa, this);
chdan 2002-03-18
  • 打赏
  • 举报
回复
//.h
class CMyView:public CFormView
{
private:
static UINT aaa(LPVOID pInfo); // 声明 declaration
.................
}
//.cpp
UINT CMyView::aaa(LPVOID pInfo); // 定义 definition
//实现
UINT CMyView::aaa(LPVOID pInfo)
{ // 用pInfo传递CMyView一个实例指针
CMyView* pThis = (CMyView*)pInfo;
pThis->bbb();
..............
}
rushing 2002-03-18
  • 打赏
  • 举报
回复
.h中还有一个成员变量

int timeout;
static void aaa();
static void bbb();

.cpp成员函数调用这个变量
void aaa()
{
bbb();
}

void bbb()
{
timeout++;
}
inside1 2002-03-18
  • 打赏
  • 举报
回复
再完整些
robothn 2002-03-18
  • 打赏
  • 举报
回复
//.h
private:
static HGLOBAL s_hImageBuffer;
static HANDLE s_hEventKill;

//.cpp
//一样要先Definition
HANDLE CMyView::s_hEventKill;
HGLOBAL CMyView::s_hImageBuffer;//Buffer for hold image

//然后再用
robothn 2002-03-18
  • 打赏
  • 举报
回复
帖出来src
robothn 2002-03-18
  • 打赏
  • 举报
回复
是用到的全局变量要static,局部变量就算了
rushing 2002-03-18
  • 打赏
  • 举报
回复
用static int成员变量,结果出错。
robothn 2002-03-18
  • 打赏
  • 举报
回复
是,调用的函数也要static
rushing 2002-03-18
  • 打赏
  • 举报
回复
是否里面用到的变量也为static?
rushing 2002-03-18
  • 打赏
  • 举报
回复
在定义类的时候,应该还没有实例。
rushing 2002-03-18
  • 打赏
  • 举报
回复
用雷鸟的办法编译可以通过。

但是在这个static void aaa()中调用其他成员函数时出错。

void aaa()
{
bbb();
}
cct8 2002-03-18
  • 打赏
  • 举报
回复
用robothn(雷鸟) 的方法就可以了。

也可以用非static函数,条件是,你一定要传递一个实例的地址给该函数
比如一个成员函数:void aaa(void)。
你创建线程时,传递一个该类的某个实例的地址作为参数。
rushing 2002-03-18
  • 打赏
  • 举报
回复
在static成员函数中调用的函数是否都应为static函数?
robothn 2002-03-18
  • 打赏
  • 举报
回复
//.h
class CMyView:public CFormView
{
private:
static UINT aaa(LPVOID pInfo); // 声明 declaration
.................
}
//.cpp
UINT CMyView::aaa(LPVOID pInfo); // 定义 definition
//实现
UINT CMyView::aaa(LPVOID pInfo)
{
..............
}
rushing 2002-03-18
  • 打赏
  • 举报
回复
Frank_Xu()

不懂。
加载更多回复(5)

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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