整理自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