|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[C++] Singleton class su Windows non vanno ???
Quì è uscito un problema strano:
non a me ma ad un mio collega (che poverino sta programmando su Windows) non funzionano le classi Singleton, in pratica si trova 2 oggetti diversi della stessa classe, uno nel main e l'altro nella dll. C'è un tipo esperto che dice che su Windows non funziona la tecnica Singleton proprio per la gestione che ha il s.o. delle librerie dll. C'è qualcuno che sa qualcosa a proposito ? il mio collega deve usare una variabile globale per risolvere il problema ... Possibile non ci sia qualche trucco per ingannare il sistema in qualche modo ? Eh, la potenza di Windows: i Singleton sono doppi
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi sembra ovvio che non funzionino...su Linux funzionano i singleton con le librerie shared ?
Le librerie dinamiche hanno una vita separata dagli eseguibili che le usano e come tali anche una distinta fase di inizializzazione dei membri statici. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
In genere sì. In genere.
__________________
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 |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
In pratica windows col suo splendido sistema ha sfanculizzato qualche regola del C++. E immagino quindi che non funzioni neanche il sistema dei membri statici usati di solito come contatori se si utilizza qualche libreria dinamica
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora...che il singleton funzioni all'interno della sola libreria statica mi sembra ovvio. Deve funzionare.
Forse ho capito male la questione...mi fai un esempio minimale (mi raccomando testalo, non solo riportando un pezzo del tuo codice, perché su queste cose bisogna avere il massimo della precisione per riuscire a venire a capo del problema) con il sorgente della dll e con il main ? Ultima modifica di cionci : 30-01-2008 alle 09:22. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
adesso glielo chiedo se ha qualcosa (è il tipo che ho convinto l'altra volta a sbloccare la sua read, non so se ricordi)
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì mi ricordo...
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
In pratica vengono create 2 istanze distinte. Su Linux va, una sola istanza, su Windows no. Il tutto è troppo complesso anche perchè il tipo sta lavorando in C++ (l'interfaccia che comunica con la mia Logica) ma deve comunicare con una libreria (Reflected Memory) scritta in C. Io non ho capito bene cosa gli serva, mi ha solo esposto il problema dei singleton su windows e chiesto consigli: gli ho detto, usa i forum sto prendendo tempo, il tipo è sparito
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Scusa, ho scritto statica al posto di dinamica.
Comunque guarda se ti fa un esempietto semplice in cui replica il problema. Altrimenti è difficile dare una risposta. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Il tipo è tornato e sta scrivendo qualcosa ... btw: non ho usato i command pattern per risolvere l'altro problema, ho risolto in maniera semplicissima (una semplice classe) perchè l'unico comando da eseguire in ritardo è spegnere un display.
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sì ma non contarci. A seconda di come è compilato e linkato lo shared object, potresti avere lo stesso identico comportamento che hai su windows.
__________________
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 |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Tanto e' vero che il tuo amico sta avendo problemi che si risolvono semplicemente implementando la soluzione senza il Singleton...
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
infatti sta usando una variabile globale nel main, dichiarata extern nella libreria (se ho capito bene) ma preferirebbe non doverla usare (e lo capisco) e, da quello che dice, l'unico sistema sarebbe l'uso del singleton.
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Ma ne condivide tutti i problemi. Tolga del tutto la variabile globale e risolve i suoi problemi. Nel 99% dei casi ci vuole piu' tempo a dirlo che a farlo.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Quindi, per garantire che ci sia una sola istanza, vorrebbe usare una classe Singleton. Il tipo è sparito di nuovo ed io devo uscire a sbrigare qualche faccenda Grazie, a dopo
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:03.




















