c++中,类成员函数作为线程函数 。网上的一段代码研究
这段代码可以运行。使用非静态方法后,传入的this指针没有使用,非传入的this对象调用自己的成员函数。!!!!
#include "stdafx.h" #include <stdio.h> #include <process.h> class TMyClass { int m_nCount; int m_nId; public: TMyClass(int nId, int nCount) :m_nId(nId), m_nCount(nCount) { m_nId = nId; m_nCount = nCount; } //感觉有问题,传入的this指针没有使用。这个从表面来看用了非静态方法,其实意义不大。 void ThreadProc() // 类成员方法 { for (int i = 0; i < m_nCount; i++) // 根据m_nCount成员打印一排数字 { printf("Class%d : %d\n", m_nId, i); } } }; int main(int argc, char* argv[]) { union { // 联合类,用于转换类成员方法指针到普通函数指针(试过编译器不允许在这两种函数之间强制转换),不知道有没有更好的方法。 void ( *ThreadProc)(void *); void ( TMyClass::*MemberProc)(); } Proc; // 尽管联合里的两种函数类型现在看起来有很大不同,但它们的最终形式是相同的。 TMyClass MyClass1(1, 10), MyClass2(2, 5); // 产生两个TMyClass对象 Proc.MemberProc = &TMyClass::ThreadProc; // 转换,Proc.ThreadProc就是对应的普通函数指针了 _beginthread(Proc.ThreadProc, 4096, &MyClass1); // 开始线程,这里的Proc.ThreadProc实际上是TMyClass::ThreadProc, 它要的this指针是我们给的&MyClass1。 //_beginthread(Proc.ThreadProc, 4096, &MyClass2); system("pause"); return 0; }
#include "stdafx.h"#include <stdio.h>#include <process.h>
class TMyClass {int m_nCount;int m_nId;public:TMyClass(int nId, int nCount):m_nId(nId), m_nCount(nCount){m_nId = nId;m_nCount = nCount;
}//感觉有问题,传入的this指针没有使用。这个从表面来看用了非静态方法,其实意义不大。void ThreadProc() // 类成员方法{for (int i = 0; i < m_nCount; i++) // 根据m_nCount成员打印一排数字{printf("Class%d : %d\n", m_nId, i);}}};
int main(int argc, char* argv[]){union { // 联合类,用于转换类成员方法指针到普通函数指针(试过编译器不允许在这两种函数之间强制转换),不知道有没有更好的方法。void ( *ThreadProc)(void *);void ( TMyClass::*MemberProc)();} Proc; // 尽管联合里的两种函数类型现在看起来有很大不同,但它们的最终形式是相同的。
TMyClass MyClass1(1, 10), MyClass2(2, 5); // 产生两个TMyClass对象
Proc.MemberProc = &TMyClass::ThreadProc; // 转换,Proc.ThreadProc就是对应的普通函数指针了
_beginthread(Proc.ThreadProc, 4096, &MyClass1); // 开始线程,这里的Proc.ThreadProc实际上是TMyClass::ThreadProc, 它要的this指针是我们给的&MyClass1。//_beginthread(Proc.ThreadProc, 4096, &MyClass2);system("pause");return 0;}