Newsgroup: it.comp.programmare.win32
Titolo: ThreadProc

come faccio a utilizzare la ThreadProc??? mi dice che non esiste!!!


Sei piuttosto vago !
Immagino che tu stia cercando di lavorare con i thread e se non ricordo male
lavori con Visual C++.
Lavori con MFC o fai senza ?
Cosa intendi dire che la ThreadProc non esiste ? L'hai implementata ?
Porlock.


si esatto,starei cercando di lavorare con i thread,ma con scarsi
risulatati... ;-)
il fatto è ke la funzione _beginthread non riesco propria a usarla, allora
ho provato con la CreateThread,ke mi chiede giustamente l'idirizzo iniziale
del thread,
nel MSDN c'è praticamente scritto(non so bene l'inglese,ma io intuisco
questo) che per passargli lo "start address" devo utilizzare il valore
ritornato dalla ThreadProc, giusto??? allora usco questa benedetta
ThreadProc ma a questo punto mi dice che ThreadProc UNDECLARED IDENTIFIER!!!
io ho incluso le librerie: process.h e winbase.h, devo fare altro???


Per threadProc si intende una funzione che tu devi definire (rispettando il 
formato definito per threadproc) e passare alla CreateThread.
E' piů o meno equivalente alla wndproc (che non č definita da nessuna 
parte) e deve essere associata alla tua classe di finestre o alle varie 
funzioni che puoi passare alle varie Enum... (EnumWindows e simili)
Comunque _beginthread e _beginthreadex funzionano nello stesso modo (e ti 
consiglio di utilizzarle se prevedi di richiamare funzioni della libreria 
standard da dentro la threadproc).
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 ha scritto nel messaggio
news:TAQO6.16556$h9.13...@news.infostrada.it...

process.h e winbase.h, devo fare altro??? 
dichiarare ThreadProc (meglio se con altro nome). Non hai letto su MSDN 
la nota "ThreadProc is a USER DEFINED procedure..."?

 K
_beginthread come CreateThread vuole il puntatore alla funzione d'ingresso
del thread.
Se richiami _beginthread come hai fatto tu, non passi il puntatore alla
funzione ma passi il puntatore void che ritorna la chiamata alla funzione
nuovo_punto.
Cerco di spiegarmi nel dettaglio, se scrivo:
_beginthread(nuovo_punto(NULL),0,NULL);
cosa succede ?
1) Il compilatore genera il codice della chiamata della funzione nuovo_punto
passando come parametro NULL
2) La funzione ritorna un PVOID.
3) Il compilatore genera il codice per chiamare la funzione _beginthread
passando come primo argomento il puntatore ritornato da nuovo_punto....e qui
casca l'asino.
_beginthread non vuole un puntatore void vuole un puntatore ad una funzione
!
Ecco perché ti genera l'errore da te riportato:
cannot convert parameter 1 from 'void' to 'void (__cdecl *)(void *)'
effettivamente il compilatore non sa come convertire un puntatore void ad un
puntatore a funzione.
Tu allora dovresti più correttamente scrivere:
_beginthread(nuovo_punto,0,NULL);
In questo caso passi alla beginthread il puntatore alla funzione che altro
non è che l'indirizzo d'ingresso della funzione.
Ti dico questo perché se vuoi puoi ritornare ad utilizzare _beginthread
invece di CreateThread (non conosco le differenze specifiche, sospetto che
_beginthread si appoggi comunque alle API del sistema operativo), e poi
perché lo stesso errore lo potresti commettere con CreateThread.
Ciao
Porlock.

bhe,t ringrazio assai x le risposte,avevi proprio ragione,SONO UN PIRLA!!!
infatti tornando a usare la _beginthread in quel modo(ke pirla,potevo anke
arrivarci da solo...) ora funziona oltre ke sul mio pc anke sugli
altri!!!penso ke la differenza con la CreateTrhead sia proprio questo: la
seconda gira solo su NT...
Grazie a tutti!!!

 Subject: 	Re: ThreadProc
