zoukankan      html  css  js  c++  java
  • 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指针作为参数。

  • 相关阅读:
    2. linux下如何上传和下载文件
    (六)使用Docker镜像(下)
    (五)使用Docker镜像(上)
    1. chmod命令
    阿里P7/P8学习路线图——技术封神之路
    问题二:pip install python-igraph 报错,C core of igraph 没有安装。
    问题一:【Hive】explain command throw ClassCastException in 2.3.4
    (四)docker创建私人仓库
    P5024 保卫王国
    jzoj5980. 【WC2019模拟12.27】字符串游戏
  • 原文地址:https://www.cnblogs.com/judes/p/5921104.html
Copyright © 2011-2022 走看看