Descripción del uso de funciones de tiempo de ejecución de C (CRT) y () de CreateThread

Id. de artículo: 104641 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

Funciones en tiempo ejecución C todo excepto el trabajo de la función signal() correctamente cuando se utiliza en subprocesos creados por la función CreateThread(). Sin embargo, dependiendo de que se llama a las funciones de CRT, puede haber una pérdida de memoria pequeña cuando terminan subprocesos. Llamar a strlen(), por ejemplo, no se activa la asignación del CRT subproceso-bloque de datos y llamar a malloc(), fopen(), _open(), strtok(), ctime() o localtime() hace que la asignación de un CRT por subproceso-bloque de datos, lo que puede provocar una pérdida de memoria.

Más información

El manual "Técnicas de programación" suministrado con estados de Visual C++ de 32-bit Edition el uso de CreateThread() en un programa que utiliza LIBCMT.lib origina muchas funciones de CRT un error. En realidad, la única función que no debe utilizarse en un subproceso creado con CreateThread() es la función signal().

Hay dos formas de crear subprocesos. Un método implica el uso el CRT _beginthread() o _beginthreadex() (con Visual C++ 2.0 y posteriores); el otro método implica mediante la API CreateThread(). Todas las funciones CRT distinto de la función signal() funcionan correctamente en los subprocesos creados con _beginthread() o CreateThread(). Sin embargo, existen algunos problemas relacionados con utiliza funciones CRT en subprocesos creados con CreateThread().

Subprocesos que se crean y terminan con las funciones API de Win32 de ExitThread() y CreateThread() no tienen memoria asignada por el CRT para datos estáticos y búferes estáticos que se limpian cuando el subproceso termina. Algunos ejemplos de este tipo de memoria son datos estáticos para errno _doserrno y los búferes estáticos utilizados por funciones como asctime(), ctime(), localtime(), gmtime() y mktime(). Utilizar CreateThread() en un programa que utiliza el CRT (por ejemplo, vínculos con LIBCMT.lib), puede provocar una pérdida de memoria de unos 70-80 bytes cada vez que finalice un subproceso.

Para garantizar que todos los datos estáticos y búferes estáticos asignados por el CRT se limpian cuando el subproceso termina, _beginthreadex() y _endthreadex() deben utilizarse al crear un subproceso. La función _beginthreadex() incluye los mismos parámetros y funcionalidad como CreateThread().

Nota No es posible terminar un subproceso con _endthreadex() cuando se creó con CreateThread().

Propiedades

Id. de artículo: 104641 - Última revisión: viernes, 29 de abril de 2005 - Versión: 3.0
La información de este artículo se refiere a:
  • The C Run-Time (CRT) sobre las siguientes plataformas
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 2.2
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
Palabras clave: 
kbmt kbhowto kbinfo KB104641 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 104641
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios