C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Callback Funktion Problem

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andreas Volz
Guest





PostPosted: Wed Apr 21, 2004 12:06 am    Post subject: Callback Funktion Problem Reply with quote



Hi,

ich habe ein Problem mit einem Timer der eine Callback Funktion aufrufen
soll. Wenn die Funktion außerhalb der Timer-Klasse liegt geht es, aber
wenn es eine Member-Variable der Timer-Klasse ist bekomme ich diesen
Fehler von g++:

Thread.cpp: In member function `virtual bool Timer::StartTimer(long
unsigned int, bool, long unsigned int)':
Thread.cpp:513: error: no matching function for call to `SelectTimer::
timeSetEvent(unsigned int&, <unknown type>, void*,
SelectTimer::<anonymous enum>)'
.../include/Thread.h:403: error: candidates are: bool
SelectTimer::timeSetEvent(unsigned int, void (*)(void*), void*,
unsigned int)

Hier mal ein paar Auszüge aus meinen Klassen. Falls ich noch mehr posten
soll bitte sagen:

void testfunc (void *dwUser)
{
}

bool SelectTimer::timeSetEvent(unsigned int uDelay,
void (*callbackFunc) (void *dwUser),
void *dwUser,
unsigned int fuEvent)
{
....
}

void Timer::CallbackRunner (void *dwUser)
{
....
}

class Timer {
SelectTimer st;
...
}

bool Timer::StartTimer(...)
{
#ifdef GEHT
st.timeSetEvent ((unsigned int) TimeMS,
testfunc,
(void*) this,
Single ? SelectTimer::TIME_ONESHOT :
SelectTimer::TIME_PERIODIC);
#endif
#ifdef GEHT_NICHT
st.timeSetEvent ((unsigned int) TimeMS,
CallbackRunner,
(void*) this,
Single ? SelectTimer::TIME_ONESHOT :
SelectTimer::TIME_PERIODIC);
#endif
}


Das ist jetzt erstmal sehr wenig Code dazu. Vielleicht kann man das
Problem ja schon sehen. Ansonsten schicke ich auch gerne die Klasse oder
den Link dazu an jeden der mir helfen will.

Ach ja, bei timeSetEvent handelt es sich nicht wirklich um die Windows
API-Funktion, sondern um einen Nachbau unter Linux.

Gruß
Andreas
--
Die eMail-Adresse ist existent, aber um das Risiko meines Spamfilters
oder eines vollen Briefkastens zu umgehen, bitte an die gleiche Adresse
ohne "-spam-trap" schicken.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Rolf Magnus
Guest





PostPosted: Wed Apr 21, 2004 9:20 am    Post subject: Re: Callback Funktion Problem Reply with quote



Andreas Volz wrote:

Quote:
Hi,

ich habe ein Problem mit einem Timer der eine Callback Funktion
aufrufen soll. Wenn die Funktion außerhalb der Timer-Klasse liegt geht
es, aber wenn es eine Member-Variable der Timer-Klasse ist bekomme ich
diesen Fehler von g++:

Zeiger auf (nicht-statische) Memberfunktionen sind nicht kompatibel zu
Zeigern auf nicht-Member-Funktionen. Das liegt daran, daß die
Memberfunktion ja nur für ein Objekt aufgerufen werden kann und dann
der this-Zeiger als verstecktes zusäzliches Argument an diese übergeben
werden muß. Du wirst also bei deiner testfunc bleiben müssen. Den
übergebenen void* hast du ja schon mit them this-Zeiger belegt und
brauchst ihn also nur wieder zurückcasten. Dann kannst du von dort die
Memberfunktion aufrufen. Etwa so:

void testfunc (void *dwUser)
{
static_cast<SelectTimer*>(dwUser)->CallbackRunner(dwUser);
}

Wobei die Memberfunktion den void* eigentlich nicht unbedingt braucht.
Sie hat ja den this-Zeiger.
Ach ja, falls das verwendete API in C geschrieben ist, muß deine
testfunc als extern "C" deklariert sein, also:

extern "C" void testfunc (void *dwUser)
....

Falls nicht, kannst du sie auch zur static-Memberfunktion machen.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andreas Volz
Guest





PostPosted: Wed Apr 21, 2004 9:44 am    Post subject: Re: Callback Funktion Problem Reply with quote



Am Wed, 21 Apr 2004 11:20:05 +0200 schrieb Rolf Magnus:

Quote:
Falls nicht, kannst du sie auch zur static-Memberfunktion machen.

Ah, das war die Lösung. Tausend Dank! Das hat mich gestern Nacht an den
Rand des Wahnsinns getrieben ;-)

GRuß
Andreas
--
Die eMail-Adresse ist existent, aber um das Risiko meines Spamfilters
oder eines vollen Briefkastens zu umgehen, bitte an die gleiche Adresse
ohne "-spam-trap" schicken.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Thomas Gies
Guest





PostPosted: Thu May 27, 2004 6:23 pm    Post subject: Re: Callback Funktion Problem Reply with quote

Andreas Volz hat geschrieben:
Quote:
Am Wed, 21 Apr 2004 11:20:05 +0200 schrieb Rolf Magnus:

Falls nicht, kannst du sie auch zur static-Memberfunktion machen.


Wäre es denn in diesem Fall nicht sinnvoll, sich eine abstrakte
Schnittstelle zu überlegen, über die dann das Timer-Event mittels
simplem Aufruf angestossen wird.

Ist nicht so C mässig wie das direkte herumfuchteln mit Pointern auf
Funktionen und auf der anderen Seite kann man dann direkt ein Objekt
haben. Wenn man dann doch was aus ner C-Library aufrufen muss, dann
könnte man für diesen Fall ja einen Proxy nehmen.

Thomas
--
I'm not the greatest; I'm the double greatest. Not only do I knock 'em
out, I pick the round.
Muhammad Ali, NY Times 9 Dec 62

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.