Estoy enfrentando numerosos bloqueos en una aplicación que tiene muchos subprocesos múltiples.¿CWnd :: GetSafeHwnd() y CWnd :: m_hWnd ThreadSafe?
la lectura de estos MSDN page, technical note y this article on TLS, me han entendido que los objetos CWnd se asignan a HWND en el TLS que es un acceso de memoria dependendent hilo.
Iba a desacoplar todo lo que se parece a CWnd thread-remote access, y transformarlo en referencias HWND y luego utilizar :: PostMessage como puerto de comunicación. (Y representa una gran cantidad de trabajo por lo que veo en el código actual por el momento, de hecho estuve desarrollando una solución, eso tomará mucho tiempo, así que tuvimos que discutir al respecto).
Pero uno de mis colegas realmente insistió profundamente en que simplemente mantenga el CWnd * en los hilos extranjeros, adopte la política :: PostMessage bien, pero use CWnd :: GetSafeHwnd() o el pMyCWnd-> m_hWnd en los hilos extranjeros para recuperar el HWND nativo.
He estado argumentando que ninguna parte he visto que el GetSafeHwnd() es multi-hilo, y que el CWnd objet estar en el TLS, su valor en otro hilo es diferente. ¿Estoy equivocado? MSDN claramente usa el término "Resultados inesperados".
¿Cuál es su punto de vista, a pesar de llamar a CWnd :: GetSafehwnd() o pMyCWnd-> m_hWnd en hilos externos desde el hilo del creador?
Tiene cualquier documentación de MSDN que indique que esto es seguro o no.
Buen consejo, pero no puedo recodificar todo, muchos LOC, y tiene más de 10 años, hay una gran historia que no puedo borrar :-) –
Bueno, tu pregunta es básicamente " Tengo que hacer esto extremadamente inseguro, ¿es seguro? Y la respuesta es probablemente que "nada lo hará seguro". Puede hacerlo * más seguro * hasta cierto punto, pero dudo que se pueda hacer sin problemas en el diseño actual. – StilesCrisis
(Por cierto, me puedo relacionar. También trabajo en una base de código MFC de 10 años. Gracias a Dios que no tenemos hilos, los codificadores originales no fueron lo suficientemente inteligentes como para haberlo conseguido). – StilesCrisis