Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-06-2003, 10:58   #1
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
[C++]Funzione statica in una gerarchia di oggetti...

Ho bisogno di creare una gerarchia di oggetti... Questi oggetti devono contenere una funzione statica (mi serve statica perchè la devo lanciare come thread)...
Vorrei però che questa funzione sia anche virtuale e nell'oggeto base non venga implementata...
Faccio un esempio di quello che vorrei fare:
Codice:
class A {
   virtual static DWORD WINAPI ThreadFunction(LPVOID lpParameter) = 0;
public:
   A();
   HANDLE Start();
};

HANDLE A::Start()
{
   return CreateThread(NULL, 10240, ThreadFunction, (LPVOID)this, 0, &threadID);
}

class B: public A {
   virtual static DWORD WINAPI ThreadFunction(LPVOID lpParameter);
};

DWORD B::ThreadFunction(LPVOID lpParameter)
{
   while(1) {
   /*...*/
   }
}
Il compialtore mi dice che non si può dichiarare una funzione statica come virtuale...e questo mi torna...di conseguenza bisogna fare in un altro modo...
Ora...io avevo pensato ad un modo per aggirare il problema...
Codice:
class A {
   static DWORD WINAPI ThreadFunction(LPVOID lpParameter);
   virtual DWORD Thread() = 0;
public:
   A();
   HANDLE Start();
};

HANDLE A::Start()
{
   return CreateThread(NULL, 10240, ThreadFunction, (LPVOID)this, 0, &threadID);
}

DWORD A::ThreadFunction(LPVOID lpParameter)
{
   //In lpParameter passo il puntatore a this
   return ((A*)lpParameter)->Thread();
}


class B: public A {
   virtual DWORD Thread();
};

DWORD B::Thread()
{
   while(1) {
   /*...*/
   }
}
Che ne dite ? E' una buona soluzione ? Ah...ovviamente bisognerà gestirsi l'accesso concorrente sui dati della classe...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 12:19   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Sì mi sembra buona
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 12:25   #3
maxithron
Senior Member
 
L'Avatar di maxithron
 
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
Ma il linguaggio C sta per C..ionci?

Ottima idea!
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n;
Utilizzando atomi trivalenti drogheremo il silicio di tipo p;
Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo
maxithron è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 12:36   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "maxithron"

Ma il linguaggio C sta per C..ionci?
No è un definizione doppiamente ricorsiva...sta per C-on-C
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 12:37   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "ilsensine"

Sì mi sembra buona
Ci sono modi alternativi ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 12:56   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originally posted by "cionci"


Ci sono modi alternativi ?
Niente che valga la pena di seguire. Tempo fa avevo fatto una cosa simile; avevo anche provato a lanciare il thread direttamente nel costruttore della classe base, ma non è possibilie in quanto non si ha ancora la visibilità delle funzioni virtuali delle classi discendenti.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 12:59   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Thanks...poi vi farò vedere il risultato...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 15:39   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ho un altro problema simile...

E per un singleton come faccio ? Non posso derivarlo...
Codice:
class sing {
	static sing*_inst;
protected:
	sing() { Load(); };
public:
	static sing* GetIstance();
	virtual bool Load() = 0;
	virtual bool GetParam(...); /*le ho messe solo per bellezza*/
	virtual bool SetParam(...);
};

sing::_inst = NULL;

public A: public sing {
public:
	virtual bool Load() { /*...*/ };
};
Ho fatto bene ? "A" mi sembra di poterlo trattare come un normale singleton, vero ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 15:44   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No azz...non va bene la GetInstance...
Codice:
sing* sing::GetInstance(){
	if(_inst == NULL)
		_inst = new sing;
	return _inst;
}
Purtroppo non credo che ci siano vie alternative qui...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2003, 17:29   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Qui non ti posso dire nulla, i singleton non esistono dalle mie parti...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2003, 12:53   #11
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originally posted by "cionci"

Ho un altro problema simile...

E per un singleton come faccio ? Non posso derivarlo...
Codice:
class sing {
	static sing*_inst;
protected:
	sing() { Load(); };
public:
	static sing* GetIstance();
	virtual bool Load() = 0;
	virtual bool GetParam(...); /*le ho messe solo per bellezza*/
	virtual bool SetParam(...);
};

sing::_inst = NULL;

public A: public sing {
public:
	virtual bool Load() { /*...*/ };
};
Ho fatto bene ? "A" mi sembra di poterlo trattare come un normale singleton, vero ?
Non puoi chiamare un metodo virtuale nel costruttore, la costruzione dell'oggetto non e' ancora stata completata: oltre al fatto che il costruttore della classe derivata non e' stato ancora chiamato (e quindi rischieresti di operare su di un oggetto inconsistente) in generale ti troverai con un vtable incompleta (fai una prova con una classe base astratta e il g++ ti riportera' un "pure virtual method called" ). Se non ricordo male inoltre ogni classe derivata ha una copia dei campi statici ( sing::_inst e' diverso da A::_inst ) e quindi devi in ogni caso operare differentemente.
Come li vorresti utilizzare i due singleton ? (considerarli due distinti, considerarli uguali...)
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2003, 18:03   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ti spiego quello che volevo fare....

Io volevo fare una classe base astratta per cui solo definendo la funzione Load la classe derivata era utilizzabile come singleton...
Codice:
class A {
/*quello che ci dovrà essere*/
public:
   static A *GetIstance();
};

class B: public A {
private:
   B();
   bool Load();
};

B::GetIstance()->(proprietà o metodi vari definiti in B);
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2003, 20:51   #13
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Ma il metodo load dovrebbe impostare il campo inst?

Comunque potresti utilizzare qualcosa del genere

Codice:
template <class T>
class singleton : public T
{
    singleton(){}
    static T* inst;
    bool loaded;
  public:
    static void init()
    {
        if ( ! loaded )
        {
            loaded = true;
            // oppure un qualsiasi altro metodo statico di T
            inst = new T();
        }
    }
    
    static T& instance()
    {
        return *inst;
    }

    static const T& instance() const
    {
        return *inst;
    }

};

class A
{
  protected:
    A();
};

/* ... */

typedef singleton<A> sin;
sin::init(...);
sin::instance().something( ... );
Di brutto c'e' che il costruttore e' protected e non private, quindi la soluzione non e' perfetta, ( al piu' puoi sempre mettere il costruttore private e aggiungere friend class singleton<A> nella classe A).
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2003, 02:52   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "/\/\@®¢Ø"

Ma il metodo load dovrebbe impostare il campo inst?
Load dovrebbe servere a caricare (e ricaricare) i valori di alcune variabili membro dell'oggetto A...
Comunque la tua soluzione è interessante...magari l'unica cosa è che non obbligo ad implementare in A un metodo chiamato Load...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Google Maps avrà una modalit&agra...
HONOR sta lavorando a uno smartphone con...
Thermaltake MAGFloe 360 Ultra ARGB Sync:...
Xiaomi 15T ora in super offerta su Amazo...
Si stringe il cerchio attorno a TP-Link ...
Amazon cambia i prezzi ancora una volta:...
Imperdibili i Google Pixel 10 a questi p...
Dyson OnTrac in super offerta su Amazon:...
Amazon: la nuova ondata di licenziamenti...
Questo portatile è un mostro: MSI...
Apple Watch Series 11 GPS + Cellular cro...
JBL Clip 5 in forte sconto su Amazon: lo...
Il nuovo top di gamma compatto di OnePlu...
Cresce il divario tra dispositivi elettr...
La missione con equipaggio Shenzhou-21 h...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v