Я использую класс Timer, который принимает void * в качестве необязательного аргумента для передачи обратного вызова.Мне нужно передать целое число, но моя логика, кажется, не работает хорошо.
В Event_PlayerSpawn () у меня есть int * clientIndex, который указывает на расположение памяти int "client".Я передаю это в void * param, а затем в обратном вызове снова приводим его к int *, затем разыменовываем его, чтобы получить значение.Где именно я иду не так?
ResultType PlayerSpawnTimer::OnTimer(ITimer *pTimer, void *pData)
{
int client = *((int*)pData);
ConquestPlayer *pPlayer = dynamic_cast<ConquestPlayer*>(CEntity::Instance(client));
Msg("Spawn Timer Called client = %d!\n", client);
if(pPlayer)
{
pPlayer->FindSpawnLocation();
}
return Pl_Continue;
}
void GameManager::Event_PlayerSpawn(IGameEvent *event)
{
int client = engine->IndexOfEdict(GetEdictOfUserID(event->GetInt("userid")));
int *clientIndex = &client;
// Add a 0.1 second delay then handle spawn location
timerPlayerSpawn = timersys->CreateTimer(&playerSpawnTimerCallback, 5.0, clientIndex, 0);
}