Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Chiedo umilmente scusa, ma mi sono accorto solo ora di aver creato per l'ennesima volta una domanda e non una discussione, quindi vi prego di chiudere o cancellare la precedente discussione, grazie
Testo quotato
Ho letto e studiato la wiki sul sito di freepascal e anche altre, compreso in delphi per vedere se riuscivo a risolvere ma niente...
il mio scopo è far eseguire 3 oggetti in parallelo, che nel mio caso sarebbero dei banalissimi scarafaggi in graph che hanno una procedura del tipo insetto.cammina (iniziox,inizioy,finex,finey,colore);
da quello che avevo capito, Tthread era un oggetto, che andava messo come padre al mio Unthread=object(Tthread) e che usando create e execute li facevo andare...
non ci riesco, penso di sbagliare qualcosa nel ragionamento ma mi dice che non trova tthread e se metto ad esempio uses Classes mi dice che devo mettere un identifier....
molto più semplicemente, senza passare per i miei e(o)rrori qualcuno mi spiegherebbe o mi passerebbe un programma anche banale che faccia uso del multithread in pascal e che funzioni in windows 7 usando lazarus ?
o se ci riuscite aiutatemi con i miei errori.....
sono due unit, una Insetti con l'oggetto insettogenerico e i relativi metodi, una unitThread quasi copiata dal sito e il prog principale che le unisce e usa:
cmem,// the c memory manager is on some systems much faster for multi-threading
{$endif}
crt,
graph,
insetti,
unitthread;
var ins1,ins2:insettogenerico;
thread1,thread2:TMyThread;
procedure thread1.Execute;
begin
ins1.cammina(100,400,100,100,15);//sposta da 100 400 a 100 100 con colore 15
end;
procedure thread2.Execute;
begin
ins2.cammina(300,400,300,100,15);
end;
begin
thread1:= TMyThread.Create(True);
thread2:= TMyThread.Create(True);
Thread1.Resume;
Thread2.Resume;
readln;
end.
gli errori sono i seguenti:
unitthread.pas(10,30) Error: Identifier not found "TThread"
unitthread.pas(10,30) Error: class type expected, but got "<erroneous type>"
unitthread.pas(17,1) Fatal: There were 2 errors compiling module, stopping
ps, era meglio se potevo usare gli spoiler =), ma non li ho trovati...
Ultima modifica effettuata da Phi il 04/03/2012 alle 20:19
si, banalmente disegna uno scarafaggio in due pose alternate per fare in modo che sembrino in movimento. L'oggetto insetto funziona, é "collaudato", ma non riesco a far funzionare i thread per farli camminare contemporaneamente
Ps mi sn accorto che nn ho chiamato i constructor, ma sono sbagliati cmnque, dmn li posto giusti, ma gli errori non centrano con quello.
Ultima modifica effettuata da giosch il 29/02/2012 alle 21:09
Ho provato a risolvere, aggiungendo classes alle unit e correggendo alcuni errori...ho semplificato lo scopo per ora e ho fatto disegnare due colonne a diverse velocità è va!!! a parte qualche difetto, ma credo sia legato a graph...
programma
Codice sorgente - presumibilmente Delphi
program insetti_con_thread;
uses
crt,
graph,
unitthread;
procedure grafica;
var
grdriver:smallint;
grmode,driver,mode:smallint;
errcode:integer;
begin
grdriver:=detect;
initgraph(grdriver,grmode,'');
errcode:=graphresult;
if errcode=grOk then
else
writeln('Impossibile passare alla modalità grafica');
end;
begin
grafica;
tmythread1.Create(false);
tmythread2.Create(false);
readln;
end.
unit
Codice sorgente - presumibilmente Delphi
unit unitthread;
interface
uses
{$ifdef unix}
cthreads,
cmem,// the c memory manager is on some systems much faster for multi-threading
ora però ho un problemuccio , non capisco nemmeno io quello che ho scritto ...ma non perchè è complicato, a nche perchè mi pare lineare, ma perchè non ho capito che cos'è TThread=class ?? cos'è class? in cosa si differenzia da object, come si usa, che regole segue? non riesco a trovare documentazione a riguardo...
grazie
Ho cambiato il nome del topic ed eliminato la discussione sbagliata.
Per capire che vuol dire class(TThread) ti posto la definizione di ereditarietà: E' la possibilità per un oggetto di acquisire le caratteristiche (attributi e funzioni membro) di un altro oggetto. Praticamente, dichiarando Type TMyThread1 = class(TThread) ... tu includei nel TMyThread1 le caratteristiche(funzioni, variabili ... ) del tipo TThread.
Volevi capire questo ? Ti ho risposto ?
P.S. Comento al codice: se usavi qualche ciclo evitavi un codice di 300 righe
Ultima modifica effettuata da Phi il 04/03/2012 alle 20:32
Grazie della risposta.
Quello che non capivo e non trovavo era questo, le classi e cos'erano, ma ora ho trovato, anche se non sono affatto semplici. http://www.freepascal.org/docs-html/ref/refch6.html#x66-76 ... La unit insetti è di un esercizio banale fatto a scuola, copiato da un libro, e è piena zeppa di errori e/o cose inutili (quella è solo una parte). Non l'ho scritta io,altrimenti non mi farei vedere in giro
Comunque ho risolto, grazie di tutto