当前位置: 技术问答>linux和unix
线程 和 成员函数 的问题
来源: 互联网 发布时间:2015-07-01
本文导语: 线程中所指定的函数能否是类的成员函数? 代码如下,请高手分析(这段代码编译不能通过) #include #include #include class TestClass { private: pthread_t thread; void *fun(void *arg); public: TestClass(void); ~TestClass(); void Sto...
线程中所指定的函数能否是类的成员函数?
代码如下,请高手分析(这段代码编译不能通过)
#include
#include
#include
class TestClass
{
private:
pthread_t thread;
void *fun(void *arg);
public:
TestClass(void);
~TestClass();
void Stop(void);
};
TestClass::TestClass(void)
{
pthread_create(&thread, NULL, fun, NULL);
}
TestClass::~TestClass()
{
Stop();
}
void TestClass::Stop(void)
{
pthread_cancel(thread);
printf("nThread stop ...");
}
void *TestClass::fun(void *arg)
{
while ( 1 )
{
printf("nThread is running ...");
sleep(1);
}
}
int main(void)
{
TestClass *tc = NULL;
tc = new TestClass();
sleep(10);
delete tc;
}
代码如下,请高手分析(这段代码编译不能通过)
#include
#include
#include
class TestClass
{
private:
pthread_t thread;
void *fun(void *arg);
public:
TestClass(void);
~TestClass();
void Stop(void);
};
TestClass::TestClass(void)
{
pthread_create(&thread, NULL, fun, NULL);
}
TestClass::~TestClass()
{
Stop();
}
void TestClass::Stop(void)
{
pthread_cancel(thread);
printf("nThread stop ...");
}
void *TestClass::fun(void *arg)
{
while ( 1 )
{
printf("nThread is running ...");
sleep(1);
}
}
int main(void)
{
TestClass *tc = NULL;
tc = new TestClass();
sleep(10);
delete tc;
}
|
除非你把fun()改成静态成员函数。
|
不能,可以将func()改为静态函数。
|
pthread_create要求是void *(*)(void *), 但是成员函数被C++加了个参数this,所以对不上了。
|
I know it's wrong but i don't know why wrong ,who can tech us!!
|
应该不支持。我试过改成外部函数立即成功。