Ezt a témát egyszer megvitattuk ChuckNorrissal katt ide az hogy te egyetlen egy str[128] használsz mindenhol az nem igazán nyerõ. A megfelelõ az hogy egy funkción belül használsz egy globális változót, fõleg azoknál amelyek igen csak igénybe vannak véve, gondolok itt OnPlayerText OnPlayerCommandText funkciókra, tehát a helyes megoldás:
new
strcmd[128],
strtext[128];
// Globál változók és mindegyiket külön külön használod egy adott funkción belül.
OnPlayerCommandText(..
{
format(strcmd,..
}
OnPlayerText(..
{
format(strtext, ...
}
Más.
Egy kérdés minek kell adatmentés rendszeres idõközönként?
Nem lenne elég csak akkor adatot menteni mikor egy esemény történik?
Pl.:
- Ha lelõnek valakit akkor OnPlayerDeath alatt mentésre kerül az új kill és death score (pont).
- Ha távozik a szerverrõl OnPlayerDisconnect mentünk mindent adatot amit kell.
- Ha csatlakozik a szerverre OnPlayerConnect akkor csatlakozási idõpont mentés
- Ha épp beírta és elküldte a jelszavát bejelentkezésnél akkor menteni valami adatot és még sorolhatnám.
Az én véleményem szerint felesleges az összes adatot újra menteni adott idõközönként.
És igen a rövid idõzítésû timerek alatt lényeges hogy mi szerepel. Itt az egy másodpercnél kisebb ismétlõdõ timerekre gondolok. (még hogy \"timerek\", mennyi angol szót veszünk már át magyarosítva?)
És igen, minek is használsz egy másodpercnél kisebb ismétlõdésû idõzítõket, szükség van rá tényleg?
SetTimer(\"Second\",1000,1);
[/quote]
ez mit takar?
Nemkellett volna azt a globális változók témát zárni, mer én akarnák vmit hozzátenni :D.
Nekem ez a véleményen, hogy szerintem nem lassít a globális, mert a pawn single thread. Azaz egy dolog fut egyszerre. Akkor indul a másik, ha az elõtte lévõ lefut. Úgyhogy ugyanúgy fog végezni egy lokális változóval, mint egy globálissal.
Lehet de írtam hamar egy rövidke tesztet ami szerint jobb kettõ global string mint egy.
Íme:
#include <a_samp>
new
globalone[4096],
globaltwo[4096];
public
OnFilterScriptInit()
{
printf(\"Global string teszt started.\");
globalone = \"teszt\\n\";
new
time;
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
// Egy darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globalone());
printf(\"Egy global string terhelés teszt ideje: %dms\", GetTickCount() - time);
////////////////////////////////////////////////////////////////////////////////
// Két darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globaltwo());
printf(\"Kettõ global string terhelés teszt ideje: %dms\", GetTickCount() - time);
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
//És mégeyszer ugyanez fordított sorrendben:
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
// Két darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globaltwo());
printf(\"Kettõ global string terhelés teszt ideje: %dms\", GetTickCount() - time);
////////////////////////////////////////////////////////////////////////////////
// Egy darab global string teszt
time = GetTickCount();
for(new i; i < 512; i++)
format(globalone, sizeof globalone, \"%s%s\", _globalone());
printf(\"Egy global string terhelés teszt ideje: %dms\", GetTickCount() - time);
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
return 1;
}
// Az egy darabként létrehozott global string extrem terhelése
stock
_globalone()
{
//--- A terhelés..
for(new i; i < 50000; i++)
format(globalone, sizeof globalone, \"%s\", globalone);
//---
new
str[10];
str = \"teszt\\n\";
return str;
}
// Két darab global string esetében a második string extrem terhelése
stock
_globaltwo()
{
//--- A terhelés..
for(new i; i < 50000; i++)
format(globaltwo, sizeof globaltwo, \"%s\", globaltwo);
//---
new
str[10];
str = \"teszt\\n\";
return str;
}
És az eredmény:
[2011.05.20 00:11:09] Egy global string terhelés teszt ideje: 9748ms
[2011.05.20 00:11:17] Kettõ global string terheléteszt ideje: 8786ms
[2011.05.20 00:11:26] Kettõ global string terhelés teszt ideje: 8848ms
[2011.05.20 00:11:36] Egy global string terhelés teszt ideje: 9326ms
[/quote]
Ezek alapján csak jobb kettõ mint egy global stringet alkalmazni mindenhol.
Tehát én még mindig maradok annál hogy egy funkciónak legyen saját global stringje, (lefoglalt memória terület, amin tud dolgozni).
De szívesen látnék valami más tesztet ami ennek ellenkezõjét bizonyítja.