Funktion eine Funktion mit Argumenten geben?
Hört sich wahrscheinlich kompliziert an.
Also ich versuche mit der Funktion std::async sowas wie einen Threadpool zu machen.
Das Problem ist das ich dazu einer Funktion z. B. „void Funktion (andere Funktion mit Argumenten)“ eine andere Funktion geben muss und mit „void(*func)(void)“ bekomme ich die Argumente nicht mit rüber.
Ich habe auch schon probiert es so zu machen „void(*func)(void), void* arg“ … geht auch nicht.
Falls mir irgendwer helfen kann, wäre ich sehr dankbar über eine Antwort.
(Die std::async Funktion ist übrigens:
#include <future>
static std::vector<std::future<void>> worker;
void addWork(void(*func)())
{
worker.push_back(std::async(std::launch::async, func));
})
Es fehlen halt nur die Argumente, die sonst gehen.
3 Antworten
Mir ist nicht ganz klar was Du wo wem wie übergeben willst (wo Du also scheiterst). Du kannst den Parameter bei AddWorker (Funktionszeiger) natürlich ganz gewöhnlich typsiieren und entsprechend muß dann eben eine Funktion mit dem korrekten Prototyp übergeben werden.
eine andere Funktion geben muss
Und was ist deren Signatur? Wenn die fix ist, kannst Du doch einfach die passenden Parameter deklarieren, z.B.
void addWork ( void(*func)(int,int), int, int )
Und wenn es allgemein sein soll, brauchst Du eben ein Template mit Parameter Pack. Das funktioniert genau so wie bei std::async:
template< class Func, class... Args >
void addWork ( Func func, Args args )
Lösung:
template<typename... _args, typename _func>
inline void createThread(_func&& func, _args&&... args)
{
std::thread(func, args...).detach();
}