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指针作为参数。

  • 相关阅读:
    《20171101-构建之法:现代软件工程-阅读笔记》
    《软件工程课程总结》
    《20171122-构建之法:现代软件工程-阅读笔记》) (5分)
    阅读任务-阅读提问-4
    《20171115构建之法:现代软件工程-阅读笔记》)
    对软件工程的期望
    自我介绍
    Javaweb学习计划
    分布式事务解决方案
    countdown模式
  • 原文地址:https://www.cnblogs.com/judes/p/5921104.html
Copyright © 2011-2022 走看看