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
  • 相关阅读:
    单链队列
    栈的顺序存储表示
    顺序队列
    串的定长顺序存储表示
    串的堆分配存储
    双向循环链表
    单循环链表的表示和实现
    串的块链存储表示
    线性表的顺序表示和实现
    线性表的单链表表示和实现
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/11576558.html
Copyright © 2011-2022 走看看