From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ye Liu" To: pthreads-win32@sourceware.cygnus.com, pthreads-win32-info@sourceware.cygnus.com Subject: Using a class method as starting routine. Date: Mon, 30 Jul 2001 13:50:00 -0000 Message-id: <3B65C795.A5680EC7@tibco.com> X-SW-Source: 2001/msg00071.html Greets, A rather dump question: how to use a class method as a starting routine of pthread_create(). I have the following code: /* create.h */ #ifndef _CREATE_H_ #define _CREATE_H_ #include #include "pthread.h" class create { public: create(); void *thread_routine(void *arg); void start(); }; #endif /* create.cpp */ #include "create.h" void *create::thread_routine(void *arg) { printf("The thread is here\n"); return NULL; } void create::start() { pthread_t thread_id; pthread_attr_t thread_attr; pthread_create(&thread_id, &thread_attr, create::thread_routine, NULL); } create::create() { } When I compiled it using VC6.0 (win32-pthread library of course), I got create.cpp C:\ye\work\vs\pthread_projects\create\create.cpp(14) : error C2664: 'pthread_create' : cannot convert parameter 3 from 'void *(void *)' to 'void *(__cdecl *)(void *)' None of the functions with this name in scope match the target type Error executing cl.exe. It seems that the compiler does not recognize thread_routine as a address. Why does it happen? How to get around of it? Thanks a lot! --ye -- Ye Liu Tel(O) 650-846-5228