Infatti serve solo per chiudere l'handle di un certo oggetto (thread, file, mutex, ecc...).
appunto.. quindi non dovrebbe chiudermi anche un thread? ho visto degli esempi su web che la utlizzavano..

Sì, è pericolosa ed è preferibile non usarla. La soluzione ideale è che il thread termini "naturalmente" cioè quando la funzione principale del thread termina o quando si chiama (nel thread) ExitThread() (che è chiamata anche implicitamente alla fine della funzione).

La domanda quindi è: cosa fa a livello pratico il tuo thread? C'è la possibilità che nel tuo thread ogni tanto ci si possa chiedere "devo terminare?" testando ad esempio una qualche variabile?
alla in pratica il 3d viene avviato da un bottone e deve svolgere un compito ogni tot secondi.. la mia implementazione é stata quella di creare il thread quando premo il bottone e con un ciclo infinito che ad ogni step rimane in attesa (sleep) di tot secondi. Questo per evitare di usare i timer e ricreare sempre il thread...

Pero' ad un certo punto devo permetterne la terminazione tramite la pressione di un bottone.. quindi inizialmente avevo messo CloseHandle, poi visto che nn funzionava ho pensato a TerminateThread ma come dici anche tu non e' proprio safe come comportamento, anche se poi non vado a modificare dati sensibili non utilizzo lock o cose del genere
Oppure metodo spartano, potrei definire un var globale che quando premo il bottone diventa ad es. false e termina il ciclo e quindi esce in maniera naturale visto che alla fine del thread ho chiamato esplicitamente ExitThread..

altre idee o suggerimenti?

grazie della risposta!