当前位置: 技术问答>linux和unix
高手救命,linux下C++,多线程问题
来源: 互联网 发布时间:2015-11-22
本文导语: 环境如下: 程序模拟一个网络环境,一个Node对象代表一个网络节点,希望Node对象实例化时生成一个线程。用每个线程间的信号量机制模拟网络节点通信。 问题如下: 函数pthread_create(&ptd, NULL, &Run, (void *)0)) 要...
环境如下:
程序模拟一个网络环境,一个Node对象代表一个网络节点,希望Node对象实例化时生成一个线程。用每个线程间的信号量机制模拟网络节点通信。
问题如下:
函数pthread_create(&ptd, NULL, &Run, (void *)0)) 要求Run一定要是static成员函数。那么Run函数无法访问其他非static成员,这样太受限制了。可不可以不用static成员函数启动线程
class Node
{
private:
int NodeID;
pthread_t ptd;
sem_t SemData;
void process();
public:
Node()
{
sem_init(&SemData, 0, 0);
pthread_create(&ptd, NULL, &Run, (void *)0));//要求Run一定是静态成员
};
static void *Run(void *) //可不可以不是静态函数
{
while(1)
{
sem_wait(&SemData);//错误,SemData非static
process(); //错误,process非static
}
}
}
程序模拟一个网络环境,一个Node对象代表一个网络节点,希望Node对象实例化时生成一个线程。用每个线程间的信号量机制模拟网络节点通信。
问题如下:
函数pthread_create(&ptd, NULL, &Run, (void *)0)) 要求Run一定要是static成员函数。那么Run函数无法访问其他非static成员,这样太受限制了。可不可以不用static成员函数启动线程
class Node
{
private:
int NodeID;
pthread_t ptd;
sem_t SemData;
void process();
public:
Node()
{
sem_init(&SemData, 0, 0);
pthread_create(&ptd, NULL, &Run, (void *)0));//要求Run一定是静态成员
};
static void *Run(void *) //可不可以不是静态函数
{
while(1)
{
sem_wait(&SemData);//错误,SemData非static
process(); //错误,process非static
}
}
}
|
用pthread_create的最后一个参数传递类实例指针,如pNode,则可以在静态成员函数里调用:pNode->func()。
|
看看这个是不是你要的
http://blog.csdn.net/blankman/archive/2005/03/29/333031.aspx
http://blog.csdn.net/blankman/archive/2005/03/29/333031.aspx