2010-11-26 39 views
2

J'écris IE add-on et j'utilise ATL pour cela. J'ai besoin de créer un thread de travail en arrière-plan pour que le thread UI soit débloqué dès que possible. Ma question est, dois-je utiliser le plus bas possible de créer ainsi fil est Winapi, CreateThread etc.Filetage dans BHO/ATL/COM. Winapi ou autre chose?

Ou est-il autre façon de créer fil communication libre des travailleurs dans des projets BHO/ATL/COM?

Je dois apprendre ce genre de choses d'abord si je pensais que je demanderais d'abord;)

Répondre

2

Il n'est pas nécessaire d'utiliser des API de bas niveau sauf si vous avez besoin du niveau de contrôle qu'ils offrent.

Avec ATL vous avez déjà CWorkerThread, mais vous pouvez également utiliser d'autres bibliothèques comme Boost.Thread si vous préférez.

+0

Merci. Je pense que c'est ce que je cherche. Je ne veux pas ajouter une bibliothèque excessive pour cette tâche simple si j'ai déjà quelque chose. J'ai essayé d'utiliser ce CWorkerThread mais je ne sais toujours pas comment. Pouvez-vous regarder mon autre question ici: http://stackoverflow.com/questions/4294629? –

0

En règle générale, vous devez utiliser boost :: fil, le ConCRT Visual Studio ou Intel TBB, selon la façon dont l'extrême vos besoins de filetage sont. Pour les utilisations les plus simples, choisissez boost :: thread. Pour les utilisations plus avancées, choisissez le ConCRT ou le TBB. N'utilisez pas WinAPI, sauf si vous êtes vraiment désespéré pour une fonctionnalité qui n'est pas offerte dans les autres bibliothèques. Le fait est que si vous écrivez une bibliothèque en C++, utiliser WinAPI pour les threads revient à revenir en assembleur pour écrire votre programme. Restez en C++ - utilisez Boost.

+0

En désaccord avec la haine de l'API. J'utilise les API tout le temps. Lean, simple, facile. –

+0

@John: "simple" et "facile" sont deux mots que je n'ai jamais entendu parler de l'API Win32. Parlons-nous de la même chose ici? Je veux dire, il est parfois sous-documenté, * extrêmement incohérent et plein de pièges bizarres et de casse-tête et cas de coin. – jalf

+0

@John Dibling: Il n'y a rien de mal avec les API, juste le WinAPI. Il est vieux, et destiné à C. Il n'y a aucune raison de l'utiliser sur le boost :: thread largement supérieur. – Puppy

1

Si vous descendez jusqu'à l'API, alors _beginthreadex est préférable à CreateThread() si votre thread utilise le CRT. (Si vous ne le savez pas, ce sera probablement le cas)

+1

Ce problème a été résolu il y a longtemps, CreateThread fonctionnera correctement. _getptd() dans le code source de crt. –