2010-01-20 7 views

Respuesta

15

_beginthread() y _beginthreadex() fue requerido por versiones anteriores de Microsoft CRT para inicializar el estado local del subproceso. La función strtok() sería un ejemplo. Eso se ha solucionado, ese estado ahora se inicializa dinámicamente, al menos desde VS2005. Usar CreateThread() ya no causa problemas.

+1

Sí, si se crea un hilo con 'CreateThread()', 'strtok()' asignará el bloque de datos por hilo. Sin embargo, cuando el hilo sale, ese bloque se filtrará. Puede que no sea un gran problema, pero ¿por qué no usar '_beginthreadex()' en primer lugar? Además, para las nuevas "aplicaciones empaquetadas", '_beginthreadex()' (de VS 2012) se asegurará de que el MTA se inicialice en el nuevo hilo. ¿Por qué no hacer que los programadores adquieran el hábito de usar '_beginthreadex()' (que realmente no tiene inconvenientes en comparación con el uso de 'CreateThread()' - incluso tiene básicamente la misma firma). –

+0

@Michael: compruebe el código fuente de CRT, busque la forma en que utiliza FlsAlloc() para instalar una devolución de llamada para liberar memoria. No poder usar el CRT en subprocesos de threadpool no es una limitación aceptable. –

+0

Hans: gracias por la información. –

Cuestiones relacionadas