2009-12-30 31 views
14

¿Qué necesito y cómo puedo usar hilos en C en Windows Vista?Usar hilos en C en Windows. Ejemplo simple?

¿Podría darme un simple ejemplo de código?

+1

Si bien esta puede ser una pregunta simple de RTFM, no es una pregunta real. Después de todo, ya hay varias respuestas reales. –

Respuesta

27

Aquí está el MSDN sample sobre cómo usar CreateThread() en Windows.

La idea básica es llamar a CreateThread() y pasarle un puntero a su función de hilo, que es lo que se ejecutará en el hilo de destino una vez que se haya creado.

El código más simple de hacerlo es:

#include <windows.h> 

DWORD WINAPI ThreadFunc(void* data) { 
    // Do stuff. This will be the first function called on the new thread. 
    // When this function returns, the thread goes away. See MSDN for more details. 
    return 0; 
} 

int main() { 
    HANDLE thread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL); 
    if (thread) { 
    // Optionally do stuff, such as wait on the thread. 
    } 
} 

También tienen la opción de llamar SHCreateThread() -La misma idea básica, pero lo hará algún tipo de inicialización del shell para usted, si se solicita, como inicializar COM , etc.

+3

Tenga en cuenta, sin embargo, que si va a utilizar el CRT en el nuevo hilo, es posible que deba ser extremadamente cuidadoso. En MSVC, por ejemplo, debe usar _beginthread/_beginthreadex y _endthread en lugar de las API relativas, para permitir que el CRT asigne/desasigne correctamente sus estructuras internas por subproceso. Creo que también en otros CRT debería ir de alguna manera así. –

+0

Además, puede usar SHCreateThread() si desea inicializar COM para usted en el nuevo hilo, entre otras cosas. –

+0

Esto parece ser un ejemplo de C++ (enlace). ¿Esto también funcionaría para C? – Jiminion

1

Las operaciones atómicas y los mutexes son buenos. Yo uso CreateThread, etc., no pthreads.

+0

Está pthreads disponible. en Windows y/o Visual Studio? – Jiminion

+0

no hay subprocesos directamente disponibles. en Windows y/o Visual Studio. Sin embargo, puede usar mingw y cygwin. –