Je ne connais pas le MultiThreading de Windows, mais celui de POSIX, toutefois voici des principes de base :
Une (un) Thread est un nouveau chemin d'execution dans ton programme.
Lorsque tu crees des Threads tu doit leur donner une fonction a executer, c'est en quelque sorte leur "main". Ces Threads une fois crees executent cette fonction puis meurent.
Les variables allouees sur le tas et globales sont communes a tous les threads, par contre les locales ne sont definies que dans un thread, donc pour faiure communiquer deux threads sans globales tu utilise le pointeur que recoit ta fonction sachant que sa valeur est celle que tu passe a la fonction qui cree la thread...
Par contre il ne faut pas que deux threads ecrivent en meme temps dans une variable (ou qu'un ecrive pendant qu'un autre lise) donc il faut des synchronisations. Elles sont de differents types : les mutex sont des elements qui verouillent une section de code, seule une thread peut executer cette section, si une autre thread doit executer le meme code elle attends (au lock du mutex) que la precedente sorte (unlock du mutex). les synchro permettent de bloquer une thread (wait, join) jusqu'a ce qu'une autre la debloque...
Pour revenir a quelque chose de plus concret je pense que CWinThread est un objet qui permet de materialiser la thread tu doit donc juste declarer un pointeur pour recevoir cet objet (je ne pense pas que ce soit necessaire, mais il n'y a pas d'equivalent en POSIX, peut etre doit il etre detruit a la fin de la thread.
Il existe des methodes qui permettent de detruire une thread depuis une autre... leur usage est tres fortement deconseille, pour ma part je le prohibe... car souvent il equivaut a une auto-destruction du programme.
Enfin il existe un biblio libre (LGPL plutot) wxWindows (www.wxwindows.org) qui propose une alternative aux MFCs qui est multi plateforme et propose des objets pour utiliser les Threads qui ne dependent donc plus de l'implementation (Windows, SUN, HP, etc) tu peux aller regarder l'objet wxThread.