wskaźnik na funkcje do obiektu

0

mam funkcję klasy, która w swoim ciele używa funkcji

pthread_create(t1,NULL,f,NULL);

gdzie

f to :

void * f(void *p)
{
// ...
}

Jak mam przekazać tę funkcję do tej klasy, bo takie coś nie działa:

void mojaklasa::mojafunkcja(void * funkcja)
{
     pthread_create(t1,NULL,funkcja,NULL);
}
0
#include <iostream>


void foo(void* p) {
    std::cout << *(int*)p << "\n";
}

typedef void (*WskaznikNaMojaFunkcje)(void*);

void bar(WskaznikNaMojaFunkcje f) {
    int x = 3;
    void* p = &x;
    f(p);
}

int main() {
    bar(foo);
    
    return 0;
}

To wypisze 3 na ekran.

HTH

// EDIT: Błąd był w tym, że typ argumentu się nie zgadzał.

0
class mainProcess :public process
{
private:
	mainProcess(void);

public:
typedef void (*pFunction)(void*);

	static mainProcess* instance;
	int Descendants[MAXDECENDANTS];
	static int DescendantsCounter;


~mainProcess(void);

static mainProcess* getInstance(void); // singelton

static process* CreateDescendant(void* function);

static process* CreateSynchDescendant(pFunction);


};
 process* mainProcess::CreateSynchDescendant(mainProcess::pFunction f)
 {
       process* tmpthread = new process();
       pthread_create(&tmpthread->thread,NULL,f,NULL);

   //    pthread_join(tmpthread->thread,NULL);
        return tmpthread;
 }

i nadal mam ten sam błąd:
invalid conversion from ‘void ()(void)’ to ‘void* ()(void)’|

0

to ‘void* ()(void)

sugeruje, ze pthread_create spodziewa sie funkcji o sygnaturze:

void* funkcja(void*)

a nie

void funkcja(void*)

0

tak mi się zdaję. Jednak nadal ten kod nie chce mi się skompilować

0

Ten czyli ktory? Musisz poprawic deklaracje wskaznika.

0
typedef void (pFunction)(void*);

robiłem i też nie działało. W sumie juz na wiele sposobów sprawdzałem i nadal nic.

Może ktoś napisać jak to powinno wyglądać :-/

0
quetzalcoatl napisał(a)

sugeruje, ze pthread_create spodziewa sie funkcji o sygnaturze:

void* funkcja(void*)

a nie

void funkcja(void*)

1 użytkowników online, w tym zalogowanych: 0, gości: 1