多线程用this指针来传递参数(整理)

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

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)//返回值一定要这样写
{
    CIo *io = (CIo *)arg;
    io->Start();      //Q2:这里不能够直接调用Start()吗?
    return 0;
}
 
 
void CIo::ioStart()
{
    HANDLE Handle;
    Handle = CreateThread(NULL, 0, start, this, 0, NULL);
    CloseHandle(Handle);
}
 
————————————————
版权声明:本文为CSDN博主「GT19930910」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/FlayHigherGT/article/details/83651281

 

上一篇:CIO的核心竞争力是什么


下一篇:重磅!!选型宝与百度云携手合作,共同推进中国互联网+进程