我想在c ++中用pthreads编写一个小测试程序,我没有使用pthreads的经验,但到目前为止我所读到的是因为pthreads是C构造而存在问题。
我的代码如下:
class A{
public:
int main();
void* do_work();
static void* helper_do_work(void*);
};
void * IMagFieldSvc::do_work(){
}
void* IMagFieldSvc::helper_do_work(void* context)
{
return ((IMagFieldSvc*)context)->do_work();
}
int A::main(){
…
pthread_create(&thread, &attr, &helper_do_work, &svc);
pthread_join(thread, NULL);
}
但用以下内容编译:
g ++ -pthread test.cxx
返回
/usr/lib/gcc/x86_64-redhat-linux/4.1.2 /../../../../ lib64 / crt1.o:在函数_start':
(.text+0x20): undefined reference to
main'中
collect2:ld返回1退出状态
我尝试添加
extern "C" void* helper_do_work(void*);
无论这样做,但错误是相同的
halp pleeze?
不知道我是否应该为此单独提出一个问题: 另外,在do_work中我想访问和更改成员变量,练习的整个目的是找出我如何访问和更改成员变量,使它们与__thread成为本地线程。这些成员变量是自定义类型,有自己的构造函数和析构函数,我不知道为什么会产生影响,但显然它确实...
答案 0 :(得分:3)
main
不能是成员函数,必须在全局命名空间中定义。
像这样定义:
int main()
{
// ...
}