Newsgroup: it.comp.lang.c++
Titolo: multithreading & co.

Salve a tutti, sto sviluppando un'applicazione multithread MFC e mi 
succede una cosa strana. Su un pc con Win2k (sembra casualmente) il 
processo talvolta non termina quando chiudo l'applicazione, e voi direte 
"ok, hai scritto una cappellata nel codice..."... puo' darsi, ma come 
mai la stessa applicazione se la faccio girare su un WinXP il processo 
si termina sempre e comunque?? sapete aiutarmi?
--
Kali



Ti consiglio di leggere "The Pragmatic Programmer"; da
come parli sembri affetto da un classico caso di
programmazione per coincidenze.
C'e' differenza fra un programma corretto e un
programma che (a volte o anche sempre) non va in crash.
Andrea

 programma che (a volte o anche sempre) non va in crash.
su questo non c'e' dubbio.
Saluti,
--
Kali

su questo non c'e' dubbio.
Bene :-) ... a volte la tentazione che prende di tanto in tanto
molti di noi programmatori e' quella di cercare di rimuovere i
crash invece che rimuovere gli errori.
Buona caccia allo scarafaggio.
Andrea

 permette di fare molta strada nella programmazione.
vabe' chiudo qui, tanto quando uno vuole credere solo alle sue idee mi 
pare ci sia un po' poco da dire...
Non ho mai detto che mi sarebbe bastato che il programma non andasse in 
crash.
Alla prossima.
--
Kali



Non ho capito allora cosa stavi cercando. Che qualcuno
confermasse che il multithreading in verita' su Windows
2000 non funziona correttamente ????
La cazzata e' nel tuo programma.
Tu credi che su 98 funzioni ma e' solo una coincidenza:
aggrapparti a quell'illusione non fa bene a te e non
fa bene ai tuoi utenti.
Forse questa puo' sembrare una posizione dura, ma e' esatta
nella stragrande maggioranza dei casi.
A volte, in rarissimi casi, effettivamente si trovano delle
magagne nella parte di base. Pero' prima di poter affermare
una cosa del genere e' necessario PROVARLA con un contesto
molto circonstanziato.
Un programmatore e' colpevole sino a prova contraria :-)
A dirla tutta secondo me dovresti semplicemente ringraziare
il cielo che su Windows 2000 la cosa non funzioni alla
chiusura e approfittare di questa *fortunata* coincidenza
per eliminare un errore che hai fatto e che 98 nascondeva.
Ad esempio una mossa interessante potrebbe essere installare
l'ambiente di compilazione su quel sistema e cercando di
capire chi fa scattare la trappola del crash.
Ovviamente facendo meno modifiche possible per evitare che
semplicemente dando degli "scrolloni" al codice il bug si
nasconda in un punto in cui anche su Windows 2000 il crash
non appare piu'.
I crash sono tuoi amici, sono gli errori i tuoi nemici.
Se invece vuoi semplicemente evitare che appaia il crash
allora e' tutto un altro discorso e le tecniche sono altre.
Io non sono comunque interessato a questa seconda visione;
a me interessano i programmi che funzionano, non quelli
che non vanno in crash.
In un linguaggio come il C++ dove quando si sbaglia non si
ottiene un runtime error ma l'undefined behaviour e' secondo
me fondamentale mantenere (o per meglio dire provare a
mantenere) il controllo *totale* di cosa succede quando il
programma e' in esecuzione.
Andrea

Kali wrote:

Ciao.
Scusa, non hai specificato niente circa *cosa* fa il programma in 
questione. In maniera mooolto generica non puoi *mai* essere sicuro che 
un algoritmo - anche di comprovata efficienza - che funziona in ambiente 
sequenziale funzioni altrettanto bene in ambiente 'concorrente'.
Per non parlare della gestione della memoria.
Parli di un programma MFC. Cerca allora di capire se il problema č 
generato da esse o dalla parte di codice che *te* hai scritto.
Cerca di capire se il codice MFC che hai creato l'hai *protetto* dai 
context switch (insomma mi hai capito no? ;) ), soprattutto con quale 
sintassi l'hai fatto.
Cosa hai usato per realizzare il multithreading ? Roba nativa microsoft 
?? Oppure hai cercato di essere aderente allo standard POSIX ( maledetto 
- ho un'esperienza terribile con esso )??? E BSD ?
Per finire, perdonami se ti dico questo ma un programma multithreading 
*innanzitutto* va sviluppato su piů piattaforme contemporaneamente, ed 
il fatto che su un sistema operativo come Win98 funziona e Win2k no mi 
sembra assolutamente logico, hai idea di quanta distanza c'č 
(concettuale e pratica tra i 2 SO)
Buona fortuna,
j0k3r

 che non vanno in crash.
e meno male che ci sei tu, allora...
:-/
--
Kali

 (concettuale e pratica tra i 2 SO)
E' sviluppato su piu' piattaforme contemporaneamente. Una e' un 2k e una 
e' un XP, non un 98... mi chiedevo cosa avessero introdotto in XP che 
facesse terminare il processo nonostante - probabilmente - alcuni thread 
rimanessero appesi...
--
Kali

:-/
Non capisco la battuta. Forse vuoi dirmi che sono uno che
si illude di sapere tutto e non ascolto. Io non credo di
essere quel tipo di persona... di pero' certo non basta che
qualcuno dica (o scriva su un libro) qualcosa per farmi
cambiare opinione.
Se un programmatore parla di un programma che da una parte
funziona e dall'altra no e dice "potrebbe esserci un
errore... pero' da questa parte funziona" secondo me e'
presente il germe della programmazione per coincidenze e
c'e' anche una pericolosa confusione su cosa sia il
significato di "funziona" (ad es. test e misurazioni
non potranno *mai* dimostrare che qualcosa funziona, ma
solo che *non* funziona).
Andrea

 cambiare opinione.
magari non "non ascolti", ma di sicuro parti da dei presupposti tutti 
tuoi...
--
Kali

 ma come mai [...]
farò finta di non aver visto
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.5. C, C++ and ASM developers
                               and beta testers are welcome!