Newsgroup: it.comp.lang.c
Titolo: Esecuzione contemporanea di più istruzioni: si può fare?

Ciao ragazzi
Sapete dirmi se al tempo di esecuzione è possibile eseguire 
contemporaneamente più righe di codice?
Faccio un esempio nel contesto nel quale dovrebbe servirmi:
Sto facendo un giochetto 2D, mi nasce però il problema di muovere più sprite 
contemporaneamente.
C'è il personaggio principale comandato dall'utente, ed una serie di nemici 
"comandati" dal computer.
Mentre allora il giochetto aspetta che l'utente interagisca con la tastiera 
per muovere il personaggio, i nemici devono muoversi automaticamente:
c'è allora ad esempio un while che viene eseguito fintanto che l'utente 
preme un tasto:
while((azione=getch())!=EOF)
    switch(azione) {
        //muovo l'omino
        .
        .
    }
}
e ci sarà un for che mi muove il nemico:
y=150
for(x=0;x<320;x+=2)
    stampo lo sprite in posizione[x+(y*320)]
Ora questi due cicli dovrebbero essere eseguiti in contemporanea!
C'è un modo per poterlo fare?
Grazie CIAO!
Carmine
 

 C'č un modo per poterlo fare?
Mai sentito parlare di thread e processi paralleli?
Dalla domanda che hai fatto direi di no...
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Si ne ho sentito parlare e come, anzi più che altro ho sentito parlare
di fork() sotto unix.
In un primo momento avevo pensato anche io ai thread, però
spezzettando l'esecuzione in due processi paralleli non saprei come poi
condividere le locazioni di memoria dei puntatori, ad esempio i
puntatori di accesso alla memoria video, o soprattutto i puntatori per
il double buffering!
Che tu sappia c'è qualche modo per fare si che 2 processi paralleli
possano condividere gli stessi indirizzi di memoria?
Usando la fork so che il codice scritto prima della sua chiamata viene
visto sia dal processo padre che dal processo figlio, quindi il
problema potrei risolverlo, il problema è però che io il giochetto lo
sto sviluppando sotto DOS (impossibile usare fork quindi...), e se ho
letto bene a qualche parte mi sembra che vi era scritto che con
CreateProcess() le istuzioni precedenti non sono riconosciute da
entrambi i processi! O mi sbaglio?
Felicissimo di sbagliarmi! :)

 possano condividere gli stessi indirizzi di memoria?
Non hai sentito parlare nemmeno di memoria condivisa (pertanto nemmeno
di sincronizzazione dei processi)...
Non sarebbe meglio farsi le ossa _PRIMA_ di affrontare certi problemi?
In caso contrario rischi che sia il problema a "farti le ossa".


 entrambi i processi! O mi sbaglio?
La CreateProcess() e` +/- l'equivalente Windows della fork(). Se sviluppi
sotto DOS te la puoi scordare, visto che DOS non e` multiprocesso, ne'
multithreading. Anzi, non vorrei sbagliare ma mi pare di ricordare che
CreateProcess() e` equivalente a una fork() seguita da una exec(), per
cui nemmeno fa eseguire lo stesso codice.
Cmq, direi che il tuo problema si dovrebbe risolvere in un modo un po'
piu` semplice:
   while (1) {
       if ( c'e` nel buffer di input qualcosa )
           reagisci all'input modificando i dati interni;
       aggiorna la grafica secondo i dati interni;
       if ( richiesta di uscita )
           break;
   }
Saluti,
Marco
-- 
To email me, remove the no_ and _spam from my address.


Bhe onestamente no...  :)
Se hai qualche link su ste cose (threads in windows e sincronizzazione dei 
processi) potresti passarmelo?
Volevo poi chiederti, una volta attestato che non so un cavolo sui threads, 
sempre leggendo qua e la ho notato che CreateThreads lavora sugli 
oggetti...io sto utilizzando un compilatore vecchiotto, il Turbo c++ 3.1 
sotto DOS, quindi niente oggetti, c'è modo di risolvere o mi sto sbagliando 
nuovamente io?
 

 nuovamente io?
Non ho mai utilizzato turbo C++.
HTH


 ottima traduzione in Italiano.
Ehm... Il libro e "Advanced Windows programming" o "Programmazione
avanzata in Windows" di Jeffrey Ricther. :-)



Ti ringrazio delle delucidazioni! Quindi mi confermi niente thread!
Proverň con la tua proposta e ti farň sapere come č andata :)
grazie
CIAO! 


Grazie 1000!
Anche se non credo ormai di usare + i threads per questo giochetto 
sicuramente per un fututo prossimo mi serviranno, almeno spero :)))
CIAO
Carmine

 ottima traduzione in Italiano.
"Ottima" ??? Se è quello che ho anch'io (della Jackson Libri) direi che la
traduzione è veramente pessima. Non si poteva fare di peggio, a mio avviso.
Ci sono intere parti assolutamente incomprensibili per gli errori di
traduzione e se non ci si sforza di capire che cosa volesse dire l'autore in
inglese, non si cava un ragno dal buco. Forse abbiamo letto libri diversi
:-)
Comunque per la programmazione multithread c'è una miriade di risorse in
giro e consiglio di usare il djgpp (la versione gcc per DOS) che dovrebbe
supportare i pthread POSIX compliant.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 sicuramente per un fututo prossimo mi serviranno, almeno spero :)))
Ah dimenticavo un dettaglio: il DOS non supporta nativamente i thread, si
possono simulare facendo dei salti mortali da acrobata, ma è proprio il caso
di dire che il gioco non vale la candela ;-)


 di dire che il gioco non vale la candela ;-)
Dovrebbero esserci delle librerie C che offrono il supporto di thread a
livello utente per qualsiasi sistema.
Ovviamente non ricordo ne' come si chiamano, ne' dove andare a ripescare
il riferimento ^_^: magari provero` a cercare


 che la traduzione è veramente pessima. 
"Mondadori Informatica". A me sembra buona, di fesserie la dentro
non ne ho trovate.


 livello utente per qualsiasi sistema.
Sì, ovviamente esistono sistemi che lavorano in mt sotto DOS (chi si ricorda
il vecchio Desqview ?) però credo che oggi realizzare un'applicazione del
genere sia uno sforzo inutile.


 non ne ho trovate.
Hum... ricordavo male, anche la mia è "Mondadori Informatica" (d'altronde
credo che di edizioni ce ne sia solo una).
