Ich denke nicht ganz. Das sind die drei Methoden für mein Counter
void CFifo:
ush(PPaket PaketPtr)
{
if (!Full())
{ memcpy(&Paket[WritePtr],PaketPtr,PaketLength);
Count++;
WritePtr++;
if (WritePtr==FIFO_LENGHT) WritePtr=0;
}
}
void CFifo:
op(PPaket PaketPtr)
{
if (!Empty())
{memcpy(PaketPtr,&Paket[ReadPtr],PaketLength);
Count--;
ReadPtr++;
if (ReadPtr==FIFO_LENGHT) ReadPtr=0;
}
}
WORD CFifo::GetCount()
{
return(Count);
}
Wenn ich jetzt in einem Dialog ein Objekt erstelle läuft der Ringpuffer dann.
Nun möchte ich aus einem anderen Dialog auf die Methode GetCounter zugreiffen
ohne eine neue Instanz zu erzeugen weil dann mein Rrinpuffer neu Initialisiert wird und somit der Konstruktor meiner FIFO Klasse neu ausgeführt wird und alle Werte auf Null gesetzt werden
CFifo::CFifo()
CFifo::CFifo()
{
Count=0;
ReadPtr=0;
WritePtr=0;
PaketLength=sizeof(TPaketTyp);
Paket=(PPaket)malloc(FIFO_LENGHT*sizeof(TPaketTyp));
if (!Paket)
{
// wnd.MessageBox("nicht genügend Speicher",NULL ,MB_OK|MB_ICONEXCLAMATION);
exit(0);
}
}
Ich habe noch eine andere Schwirigkeit. Kannst du mir mal das mit dem
"Zeiger auf ein Feld mit den Elementen TPaketTyp dynamisch reserviert"
erklären!
typedef WORD TPaketTyp // Art des Paketes im Fifo
typedef TPaketTyp *PPaket;
#define FIFO_LENGHT 1000
class CFifo
{
WORD PaketLength; // Größe eines Paketes ´sizeof(TPaketTyp)´
public:
PPaket Paket; //Zeiger auf ein Feld mit den Elementen TPaketTyp
//dynamisch reserviert
WORD ReadPtr;
WORD WritePtr;
WORD Count;
CFifo(); // Konstruktor
~CFifo(); //Destruktor
public:
BOOL Full();
void Push(PPaket Paket);
WORD GetCount();
WORD GetReadPtr();
WORD GetWritePtr();
void Pop(PPaket Paket);
BOOL Empty();
void Clear();
};
Ich finde in den Büchern nichts dadrüber!