Olá Srs,
Alguém pode me esclarecer como funciona as Threads no Windows?
O que são os Apartments, porques eles existem?
hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
hr = ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
Qual seria as diferenças das linhas acima e de STA e MTA ?
Já li algo a respeito no Code Project,
mas não assimilei muito bem.
Meu problema:
Em um projeto ATL Windows Service (VSNET 2003), era necessário
utilizar uma DLL COM com eventos.
Um exemplo de código para se
utilizar os eventos dessa DLL no projeto
foi feito por um desenvolvedor externo.
Acontece que os eventos mapeados dessa DLL são disparados
em uma outras threads criadas automaticamente.
Os eventos, ora são disparados numa
mesma thread (ID já existente), ora outra
thread é criada e utilizada. As threads não mais usadas não
são finalizadas imediatamente, mas sim, depois de
um certo tempo.
O serviço, assim, que era pra ter 3 ou 4 threads,
fica oscilando com 14, 9, 12, etc threads.
O serviço está sendo criticado por isso, e que essa
quantidade de threads possa estar causando
problema com a performance do mesmo.
Se eu utilizar hr = ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
os eventos da DLL não são disparados.
Alguém tem alguma idéia?
Se for muito trabalho pelo forum, posso entrar em contato
telefônico ou coisa do tipo.
Mando maiores detalhes do código.
Grato
Anderson
email-msn: andersonaap@hotmail.com