Salve a tutti,
sto creando una applicazione che istanzia un thread al quale viene
passato come argomento il puntatore ad una classe che contiene molte
funzioni alcune delle quali devono essere necessariamente static. Non
trovando nessun esempio in giro e non sapendo come referenziare le
variabili globali di classe CIndiceSP nelle funzioni static della
classe stessa ho utilizzato questo metodo che non mi crea nessun
errore di compilazione ma non mi sembra molto pratico.
Volevo sapere se per voi è corretto il modo in cui ho impostato il
codice o se usualmente si programma diversamente.
Allego il codice sperando possa essere chiaro.
Grazie in anticipo
#include "IndiceSP.h"
CAlbero albero;
CIndiceSP* p_indsp;
int main ( void )
{
p_indsp = new CIndiceSP(INFOContext, albero);
HANDLE IhThread = CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE)(SubscribeIndiceSP),
&p_indsp,
0,
&ThreadIdInd);
do
{
GetExitCodeThread(IhThread, &exitCode);
Sleep(1000);
} while (exitCode==STILL_ACTIVE);
{....}
}
//--- funzione del main -------------//
DWORD SubscribeIndiceSP(LPVOID arg)
{
CIndiceSP* p_indsp = (CIndiceSP*)arg;
int errcode = p_indsp->Subscribe();
if (errcode != 1 )
{
printf( "Sottoscrizione INDICE_SP fallita\n" );
ExitThread(EXIT_FAILURE);
}
else
{
printf( "Sottoscrizione INDICE_SP attiva!!!!\n" );
}
return 0;
}
////////CLASSE CIndiceSP /////////////////////////////////////
#include "IndiceSP.h"
extern CIndiceSP* p_indsp; ////è corretto?
CIndiceSP::CIndiceSP(AMI_Context_t Contesto, CAlbero& a)
{
INFOContext = Contesto;
albero = &a;
gAppISP = APPINFO_ERROR;
status_ind = AMI_FAILURE;
}
DWORD CIndiceSP::Subscribe() //funzione static
{
if ( p_indsp->gAppISP != AMI_SUCCESS ) ///gAppISP: variabile di
classe gAppISP
{
printf( "\nCIndiceSP.Subscribe() failed\n" );
return EXIT_FAILURE;
}
else
{
return EXIT_SUCCESS;
}
printf ( "Stop CIndiceSP.Subscribe\n" );
}