這是我的問題。 我有一個課程來創建定時事件。它發生在:爲延遲事件參數分配內存
的void (*func)(void* arg)
的函數指針void*
的說法
延遲
的問題我可能要在其中創建即時,我不想變量成爲類中的靜態變量或全局變量。如果這些不符合,我不能做這樣的事情:
void doStuff(void *arg)
{
somebool = *(bool*)arg;
}
void makeIt()
{
bool a = true;
container->createTimedEvent(doStuff,(void*)&a,5);
}
這不會工作,因爲布爾函數返回時被破壞。所以我必須在堆上分配這些。問題就變成了誰分配和誰刪除。我想要做的是能夠接受任何事情,然後複製其內存並在定時事件類中進行管理。但我不認爲我可以做memcpy,因爲我不知道tyoe。
在時間事件負責內存管理的情況下,實現此目標的好方法是什麼?
感謝
我不使用升壓
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);
}
爲了澄清,你想'somebool'堅持?以後什麼時候使用它?爲什麼你不能使用'a'? 「doStuff」應該是你的時間事件類的成員嗎? – JoshD 2010-10-15 18:07:32
@JoshD稍後當計時器說它已過期時使用它,這意味着在此之前將會關閉堆棧 – jmasterx 2010-10-15 18:08:41
它們是在計時器上調用的事件 – jmasterx 2010-10-15 18:09:01