Вот моя проблема.
У меня есть класс для создания временных событий. Требуется:
Указатель функции void (*func)(void* arg)
A void*
до аргумента
Задержка
Проблема в том, что я могу захотеть создать переменные «на лету», которые я не хочу, чтобы они были статической переменной в классе или глобальной переменной. Если ни один из них не выполняется, я не могу сделать что-то вроде:
void doStuff(void *arg)
{
somebool = *(bool*)arg;
}
void makeIt()
{
bool a = true;
container->createTimedEvent(doStuff,(void*)&a,5);
}
Это не сработает, потому что bool уничтожается при возврате функции. Так что мне придется распределить их по куче. Тогда возникает вопрос, кто распределяет, а кто удаляет. то, что я хотел бы сделать, - это иметь возможность воспринимать что-либо, затем копировать его память и управлять им в классе временных событий. Но я не думаю, что смогу сделать memcpy, так как я не знаю tyoe.
Что было бы хорошим способом достичь этого, когда событие времени отвечает за управление памятью.
Спасибо
Я не использую Boost
class AguiTimedEvent {
void (*onEvent)(void* arg);
void* argument;
AguiWidgetBase* caller;
double timeStamp;
public:
void call() const;
bool expired() const;
AguiWidgetBase* getCaller() const;
AguiTimedEvent();
AguiTimedEvent(void(*Timefunc)(void* arg),void* arg, double timeSec, AguiWidgetBase* caller);
};
void AguiWidgetContainer::handleTimedEvents()
{
for(std::vector<AguiTimedEvent>::iterator it = timedEvents.begin(); it != timedEvents.end();)
{
if(it->expired())
{
it->call();
it = timedEvents.erase(it);
}
else
it++;
}
}
void AguiWidgetBase::createTimedEvent( void (*func)(void* data),void* data,double timeInSec )
{
if(!getWidgetContainer())
return;
getWidgetContainer()->addTimedEvent(AguiTimedEvent(func,data,timeInSec,this));
}
void AguiWidgetContainer::addTimedEvent( const AguiTimedEvent &timedEvent )
{
timedEvents.push_back(timedEvent);
}