Newsgroup: it.comp.programmare.win32
Titolo: X lanciare un thread devo usare .NET x forza?

Sto pistolando con VC++ 2005.
Mi rompe usare le framework xchè è un pacchettone da 21Mb da installare 
x fare andare i miei programmini.
Volevo mettere una socket in ascolto e mi serve quindi un thread x non 
bloccare tutto.
Ci stavo provando con CwinThread ma non riesco mai a compilare con VC++ 
2005, ci manca sempre qualcosa. C'è qualche altra libreria che posso usare?

 2005, ci manca sempre qualcosa. C'è qualche altra libreria che posso usare?
Boost.Threads è la prima che mi viene in mente:
http://www.boost.org/doc/html/threads.html
Dietro a boost ci sono quelli dello standard del C++ quindi per la
qualità immagino che tu possa andare sul sicuro :-)
-- 
Lawrence - 
http://www.oluyede.org/blog
"Nothing is more dangerous than an idea
if it's the only one you have" - E. A. Chartier

 che posso usare? 
Le API. Usa CreateThread.
-- 
Valter Minute
(the reply address of this message is invalid)
(l'indirizzo di reply di questo messaggio non è valido)

 posso usare?
Qualsiasi cosa usi alla fine deve usare le API Win32.
Tantovale quindi usare CreateThread e tutte le API di quella famiglia che 
trovi ben documentate su MSDN.
Naturalmente se la tua App ha una UI, solo il codice che gira nel contesto 
del thread che ha creato la message pump (quello principale) deve accedere 
alla UI. Diversamente avrai crash randomici. Per evitarlo puoi usare Eventi, 
PostMessage, e mille altre sistemi che vengono usati allo scopo.
-- 
Raffaele Rialdi
Microsoft .NET MVP 
http://mvp.support.microsoft.com
 -
http://italy.mvps.org
 UGIdotNET - User Group Italiano .NET
http://www.ugidotnet.org
 Weblog: 
http://blogs.ugidotnet.org/raffaele

 
Se usi le funzione della libreria C mi sembra sia sconsigliato usare
CreateThread direttamente.
Saluti  Manlio Perillo

 Qualsiasi cosa usi alla fine deve usare le API Win32.
io avevo consigliato Boost perchč cross platform, ma non mi sono reso
conto che magari all'OP la cosa non interessa..


 CreateThread direttamente.
Lawrence ha già suggerito quali librerie standard può usare se gli interessa 
il crossplatform.
Se invece deve funzionare solo su Windows, le chiamate alle Win32 vanno più 
che bene. Ed in ogni caso se anche usasse boost, deve comunque sapere che 
viene chiamata la CreateThread in modo da leggere MSDN e capire quali sono i 
problemi, le particolarità e le attenzioni da porre.


 conto che magari all'OP la cosa non interessa..
Va benissimo, cosě ha una alternativa.
Altre motivazioni le ho scritte nel post in risposta a Manlio.


 problemi, le particolarità e le attenzioni da porre.
Giustissimo, anche perchè il multithreading _è_ complicato


che bene. 
In realtà, CreateThread è da evitare, se non ci sono equivalenti
fornite dal produttore del compilatore (le enfasi in maiuscolo sono
mie):
"The CreateThread function is the Windows function that creates a
thread. However, if you are writing C/C++ code, you should NEVER call
CreateThread. Instead, you should use the Visual C++ run-time library
function _beginthreadex. If you do not use Microsoft's Visual C++
compiler, your compiler vendor will have its own alternative to
CreateThread. Whatever this alternative is, you MUST use it."
["Programming Applications For Microsoft Windows" 4^ ed. - Jeffrey
Richter]

 mie):
Come avrete capito non sono molto esperto!Avevo realizzato 
l'applicazione con Borland con il suo "modo"di gestire i thread. Solo 
che Borland è a pagamento e quindi adesso volevo fare la stessa cosa con 
VC++ 2005 che è gratis.
L'applicazione è banale, ha solo un accept che blocca tutto.
Mi rompe che ci siano tante...strade! .NET, MFC, avevo guardato anche QT 
ma è così comoda l'interfaccia grafica di VC++.
Scusate lo sfogo.
Grazie.

 Grazie.
Prego.
SF.

 Richter]
Giusto appunto, hai ragione, ricordo quel discorso ed questo è uno dei 
motivi per cui dicevo che MSDN deve essere letto per conoscere anche questi 
problemi.
Ma quella nota si riferisce alle problematiche che sorgono quando vengono 
usate le CRT dentro il thread. Nel caso di un semplice worker thread, non è 
strettamente necessario.
Inoltre i casi in cui si verificano problemi per l'uso di CreateThread sono 
in realtà molto più limitati (vedi "Oops - I called CreateThread Instead of 
_beginthreadex by Mistake" sempre nel Richter)
Ovviamente per comodità si dovrebbe sempre preferire l'uso di _beginthreadex 
ma questo porta all'annoso problema della compatiblità delle varie versioni 
delle librerie CRT. Per molte versioni le CRT sono state compatibili ma non 
sempre e non con la versione 2005 (poiché è stata compilata per aggiungere 
le versioni "safe" per la protezione di buffer overrun).
Per problemi che ho avuto in passato sulla compatiblità delle CRT, laddove 
non strettamente necessario io non uso le CRT. Per esempio ci sono le shell 
helper api che mimano le funzioni delle stringhe delle CRT e le ho preferite 
da tempo sempre per questo motivo.
