mfc线程

1、生成线程

方式1、

HANDLE hthread; //线程句柄
hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadFunc,NULL,0,NULL);//获得句柄
CloseHandle(hthread);//如果后面不需要操作这个线程就可以把线程句柄关掉,但是线程不会被关,线程函数结束,线程才结束

方式2、

AfxBeginThread(threadFunc, this);【对CreateThread的封装】

2、线程函数

static UINT threadFunc(LPVOID pParam) //必须是静态的

{

CDialog *new_this = (CDialog*)pParam;//新指针

  while(1)
    {
    Sleep(2000);
    AfxMessageBox(_T("OK!"));

    }

}

ps:常用的三种开启线程的函数

1、CreateThread

这是windows api函数,在windows上编程最后都会调用这个函数,这个函数用起来很危险,涉及进程、线程同步,内存相关的操作,不建议使用

2、AfxBeginThread

这是mfc提供的全局函数

3、_beginthread

这是调用c的函数,可以放心的使用标准C运行时库的东西

ps:入口函数只能是全局函数或者类的静态成员函数,为什么?

首先类的成员函数是能够访问类里的成员变量的,那么为什么能访问呢?是因为编译器自动为所有成员函数增加一个参数,对象的this指针。比如:

class A{
    int fun(int);
};

实际上fun()是fun(int,A* this)

但是线程函数在初始化的时候,一般会向线程函数传递参数,所以参数个数是固定的,如create(fun,100),这里100就是传递的参数。然而fun是类成员函数,除了int参数还需要一个this指针,所以这里传递的参数就少了。使用全局函数和静态函数的原因就是,没有这个隐含的this指针作为参数。

原文地址:https://www.cnblogs.com/judes/p/5921104.html