zoukankan      html  css  js  c++  java
  • 多线程用this指针来传递参数(整理)

    整理自CSDN的论坛中,地址:https://bbs.csdn.net/topics/390703249

    0.能够用this指针传递参数的原因是,线程之间的内存地址用的是同一套,即线程A中指针1指向的位置在线程B中仍然成立。

    1.不同的线程不是两个独立的程序:线程不是进程(process是你说的程序) 

    2.线程函数必须是全局函数或者是静态成员函数:https://www.cnblogs.com/Stephen-Qin/p/11575356.html

     静态成员函数则属于类, 不属于对象.  而this指针是指向对象自己的指针,即有了对象才有this指针.  所以你不能在线程函数中直接使用this指针, 因为线程函数中根本就没有这个东西,所以需要传进去,然后进行类型转换.
    如果你研究得深入一点, 那么你就会知道, this指针, 并不是"成员变量", 而是从函数中传进去的. 即所有的非静态成员函数都会被加上一个this指针参数, 这是编译器自己加的.

    举例说明:

    class CIo
    {
    public:
        CIo();
        ~CIo();
        void ioStart();
        void Start();  //Q1:这是可以不用,直接在下面的函数里实现吗?
        static DWORD WINAPI start(void *arg);
    private:
    };
    void CIo::Start()
    {
        这个线程里面已经可以开始使用类的成员变量了
    }
     
    DWORD WINAPI CIo::start(void *arg)//返回值一定要这样写  WINAPI表示__stdcall,指被调用方去清理栈.
    {
        CIo *io = (CIo *)arg;
        io->Start();      //Q2:这里不能够直接调用Start()吗?
        return 0;
    }
     
     
    void CIo::ioStart()  //如何把这个程序运行起来?
    {
        HANDLE Handle;
        Handle = CreateThread(NULL, 0, start, this, 0, NULL); //这里的start函数需要为静态类型的
        CloseHandle(Handle);
    }
     
    ————————————————
    版权声明:本文为CSDN博主「GT19930910」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/FlayHigherGT/article/details/83651281
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    web-火狐浏览器下载地址
    如何使用jmeter录制app脚本
    Jmeter参数化(jmter和badboy的配合使用)
    monkey常用命令详解(多参数化)
    monkey常用命令
    mysql数据库命令
    Linux命令
    循环语句的使用
    K8S学习笔记一:K8S的基础概念
    jmeter做尖峰测试(浪潮测试)
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/11576558.html
Copyright © 2011-2022 走看看