2011-11-08 9 views
7

Puedo hacer llamadas a CoInitializeEx, específicamente:¿Es importante llamar a CoUninitialize en un hilo que finalizará antes de que se cierre mi aplicación?

CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED); 

En las discusiones que mi aplicación crea, pero luego termina antes de la aplicación termina. ¿Es importante emparejarlos con llamadas de CoUninitialize, o esos recursos se liberan cuando los hilos terminan?

+1

Incluso si no es importante hacerlo, ¿por qué no emparejarlos? –

+0

Porque el código ya está en fase de prueba, y prefiero no cambiarlo si el cambio es irrelevante, pero puntual. – jeffm

Respuesta

14

Los recursos generalmente se devuelven al sistema cuando finaliza el proceso, no cuando uno de sus subprocesos lo hace.

Sin embargo, CoUninitialize() no solo libera recursos y descarga archivos DLL, sino que también ingresa un bucle de mensaje modal para bombear los mensajes COM restantes antes de que finalice el hilo. La documentación dice:

Si hay conversaciones abiertas restantes, CoUninitialize comienza un bucle de mensajes modal y envía los mensajes pendientes de las contenedores o servidor para esta aplicación COM. Al enviar los mensajes , CoUninitialize garantiza que la aplicación no salga de antes de recibir todos sus mensajes pendientes. Los mensajes que no son COM están descartados.

Por lo tanto, con el fin de evitar errores de RPC en el lado de las personas que llaman, me gustaría recomendar que sigue los consejos de la documentación y siempre a CoUninitialize() antes de terminar las discusiones que han llamado CoInitializeEx().

Cuestiones relacionadas