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

Ciao
visto che la creazione di threads tramite MFC comporta dei memory leaks, 
vorrei poter utilizzare _beginthread ma ho l'errore di compilazione:
error C3861: '_beginthreadex': identificatore non trovato.
E' un'applicazione MFC compilata staticamente in modalità Release (VC++ 
2005). Ho già specificato l'opzione /MT ma senza successo.
qualche idea? grazie 

 visto che la creazione di threads tramite MFC comporta dei memory leaks, 
?????

riporto un esempio:
UINT Test_ThreadProcedure(LPVOID param)
{
    Sleep(3000);
    return 0;
}
void CTestMemDlg::OnBnClickedBtTest1()
{
    AfxBeginThread(Test_ThreadProcedure, NULL);
}
La AfxBeginThread causa un memory leak (credo dovuto all'oggetto CWinThread 
istanziato) , infatti mandandola molte volte in esecuzione si vede aumentare 
(anche se di poco) la memoria impegnata dal processo.
"GM" <g...@no.spam> ha scritto nel messaggio 
news:46de904d$0$4784$4faf...@reader4.news.tin.it...



ovviamente hai fatto l'include di <process.h>...


si.
infatti in process.h c'è  la  #ifdef _MT  che non risulta definita. 

 infatti in process.h c'è  la  #ifdef _MT  che non risulta definita. 
Se non ricordo male, viene settata selezionando una delle versioni 
Multi Threaded delle librerie di sistema nelle opzioni di progetto.
-- 
Valter Minute
(the reply address of this message is invalid)
(l'indirizzo di reply di questo messaggio non è valido)


che, a quanto mi risulta, corrisponde, appunto, a setare l'opzione /MT
(o /MD)

 ha scritto nel messaggio 
news:QyvDi.6567$Th1....@tornado.fastwebnet.it...


 
ho fatto un prog simile al tuo esempio (una dialog con un bottone) e 
inizialmente sembra che ci sia un consumo di alcuni kb.
Siccome mi sono preoccupato (perchè AfxBeginThread l'ho usata parecchio) 
ho deciso di indagare un po e ho messo un timer che se un chkbox è 
checckato ogni 100 ms chiama AfxBeginThread(Test_ThreadProcedure, NULL);
A questo punto ho verificato che dopo quel piccolo consumo iniziale, la 
memoria resta stabile. (ormai è 1/2 ora che gira quindi ha fatto circa 
18000 threads)
Quindi escluderei un leak
Ciao
GM

error C3861: '_beginthreadex': identificatore non trovato.
La _beginthreadex viene usata per sopperire alle "mancanze" della
libreria runtime del C in quanto non e' stata progettata per il MT .
Indi se non usi la libreria puoi usare tranquillamente la CreateThread
di win32 e per quanto riguarda MFC credo che non 'cazzecchi proprio
niente.

(anche se di poco) la memoria impegnata dal processo.
L'"infatti" non è sufficientemente giustificato. Il fatto che la
memoria impegnata dal processo aumenti non vuol necessariamente dire
che il processo abbia un memory leak.

 ha scritto nel messaggio 
news:QyvDi.6567$Th1....@tornado.fastwebnet.it...


Ma come fare per escludere subito che si tratti di memory leaks?
Per "presunzione di innocenza", visto che le routine di libreria non
sono scritte proprio dal primo venuto.

per carità, non osavo mica... un leak può essere causato da un utilizzo 
improprio di una routine.
intendevo dire: vedendo crescere la memoria occupata da un processo senza 
motivo, chi ci dice che dopo un po' si stabilizzerà?
Io per essere (abbastanza) sicuro ho lasciato la mia applicazione tutta la 
notte a fare test automatici.
Esistono strumenti per agevolare queste verifiche?
"Andrea Laforgia" <a.laf...@andrealaforgia.it.invalid> ha scritto nel 
messaggio news:hkj0e310dst6o6q8b...@4ax.com...


 Esistono strumenti per agevolare queste verifiche?
Se hai soldi da spendere esistono cose simili:
http://www.compuware.com/products/devpartner/visualc.htm
Nella notte dei tempi mi ero trovato bene con i loro prodotti.
-- 
partecipa anche tu:  
http://www.beppegrillo.it/vaffanculoday/
il capitalismo: 
http://www.rat-man.com/site/IT/IT/rat_cartoon.ashx?mn=5