Funktionspointer als Member n einem struct
-
Hiho,
ich habe hierbei vor einiger Zeit ein paar Problemchen gehabt, ich wollte eine Art Monitor (zur Thread-Absicherung) der sich allerdings auf eine Funktion bezieht. Von daher wollte ich bei der Erstellung des "Monitors" einen Funktionspointer als Member in einem struct halten, um die Absicherung zu gewährleisten.
Ich wollte also nicht in Funktionen, die vom Monitor abgesichert wurden, mit Semaphoren oder Mutexen hantieren, um diese abzusichern, sondern quasi den Monitor zur Absicherung hernehmen, sodass in der aufrufenden Funktion quasi nur noch stehen muss:struct monitor mon; int rc = monitor_init(&mon, function); rc = monitor_enter(&mon);
function ist in diesem Fall eben die Adresse der Funktion, die der Monitor absichern soll.
Nun habe ich es allerdings nicht hingekriegt, den Funktionspointer als Member in einem struct zu halten.
Jetzt kommt eben meine Frage:
Geht das überhaupt?
Wäre ne coole Sache.thx so far
-
Natürlich geht das. Wie hast es denn probiert?
-
naja halt mit
struct test { //... void * (*function) (void *); };
so zum beispiel.
hat aber irgendwie nicht hingehaun beim kompilieren
muss dazu sagen, dass es mich derzeit auch nicht mehr unbedingt betrifft, nur damals, als es aktuell war, wärs net schlecht gewesen, aber gab immer compile-erros, weis aber leider nimmer, welche genau.
wollt halt jetz wissen, ob vielleicht irgendwer die syntax weiß und wie man drauf zugreift etc
-
Das sieht doch richtig aus. Du musst dann halt noch function initialisieren, also auf eine entsprechende Funktion zeigen lassen. Der Aufruf ist das einfach
structure.funcp(); // bzw. struct_ptr->funcp();
Wo jetzt dein konkretes Problem war, kann ich dir so natürlich nicht sagen.
-
hmm, komisch, so hab ich des probiert, hat aber net geklappt, was mein problem war, weiß ich auch nimmer, wie is des mit der zuweisung?
so, z.b.?
void setzezeiter (struct test * asdf, void * (*f)(void *)) { test->function = f; }
geht des dann so?
also wir gehen davon aus, dass für asdf eben der speicher allokiert wurde etc
-
Vorden schrieb:
hmm, komisch, so hab ich des probiert, hat aber net geklappt, was mein problem war, weiß ich auch nimmer, wie is des mit der zuweisung?
so, z.b.?
void setzezeiter (struct test * asdf, void * (*f)(void *)) { test->function = f; }
geht des dann so?
also wir gehen davon aus, dass für asdf eben der speicher allokiert wurde etcich gehe davon aus, dass du "asdf->function = f;" gemeint hast. Wenn ja, dann ist es richtig (solange asdf auf gültigen Speicher zeigt, wie du bereits angemerkt hast)
-
erm, jo, kleiner tippfehler und so
hmm... k, müsst ich nochmal rauskramen und überprüfen etc