SFML community forums

Help => System => Topic started by: tomas on July 08, 2009, 05:29:44 pm

Title: Providing class member function to thread?
Post by: tomas on July 08, 2009, 05:29:44 pm
I want to run a class member function in a separate thread. Is there any straightforward way of doing this? An hour of googling and trial-and-error experimenting hasn't helped me in this case. It is obviously not as easy as

Code: [Select]
sf::Thread Thread(&MyObject.MyFunction);.

I tried things like

Code: [Select]
typedef void (SomeClass::*fptr)();
fptr ptrMyFunction;
ptrMyFunction = &SomeClass::MyFunction;


to get the member function pointer, but it doesn't seem to work.
Title: Providing class member function to thread?
Post by: Laurent on July 08, 2009, 05:38:49 pm
You can't. sf::Thread only accepts free function pointers.

But that's the C-style way of using it, you'd better make your class inherit from it (see the tutorial for more informations).
Title: Providing class member function to thread?
Post by: tomas on July 08, 2009, 05:47:45 pm
OK, I see. I solved it by having a wrapper function with an infinity loop that calls the class member function instead.
Title: Providing class member function to thread?
Post by: Laurent on July 08, 2009, 05:50:10 pm
Looks like an ugly solution. Why don't you make your class privately inherit from sf::Thread instead?
Title: Providing class member function to thread?
Post by: tomas on July 08, 2009, 05:55:56 pm
Hmm, I wouldn't know how to do that right away, not that experienced with C++. I will look at the tutorials again and try to figure out a good solution. Thanks for the tip.

EDIT: Implemented it in that way now. Works great and is a pretty solution. Thanks.