Ich benutze eine Timer-Klasse, die eine void * als optionales Argument nimmt, um an den Rückruf zu übergeben. Ich muss eine ganze Zahl übergeben, aber meine Logik scheint nicht gut zu funktionieren.Passing Int als void * dann bekomme ich den Wert
In Event_PlayerSpawn() Ich habe eine int * clientIndex, die auf den Speicherort des int "Client" verweist. Ich übergebe das in den void * -Param und werfe es dann im Callback auf ein int * zurück, um es dann zu dereferenzieren, um den Wert zu erhalten. Wo genau gehe ich falsch?
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);
}
Könnten Sie bitte genauer sein? Haben Sie einen Übersetzungsfehler? Also, was ist der Fehler Fehlermeldung ist und auf welcher Linie haben Sie es? Oder es ist Laufzeitfehler? – Haspemulator
Laufzeitfehler, es kommt als 0 im Callback heraus, aber wenn es übergeben wird, ist es anders (ändert sich zur Laufzeit, aber zwischen 1-33). –