C/Visual C - hilos y threads

 
Vista:

hilos y threads

Publicado por Mikel (1 intervención) el 11/09/2001 09:18:40
Hola!

¿Cómo se controlan los hilos/Threads con la función del API de Windows CreateThread(...)? Podéis enviarme algún ejemplo????
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Control de hilos con CreateThread en la API de Windows

Publicado por Alejandro (913 intervenciones) el 12/10/2024 00:12:40
La función `CreateThread` de la API de Windows se utiliza para crear un nuevo hilo (thread) en una aplicación. A continuación, te muestro cómo se utiliza y un ejemplo básico.

1. Sintaxis de CreateThread



La función `CreateThread` tiene la siguiente sintaxis:

1
2
3
4
5
6
7
8
HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  SIZE_T dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId
);

2. Parámetros



- lpThreadAttributes: Atributos de seguridad del hilo (puedes pasar `NULL` para usar los predeterminados).
- dwStackSize: Tamaño de la pila del hilo (puedes pasar `0` para usar el tamaño predeterminado).
- lpStartAddress: Dirección de la función que se ejecutará en el nuevo hilo.
- lpParameter: Parámetro que se pasará a la función del hilo.
- dwCreationFlags: Flags de creación (puedes pasar `0` para crear el hilo en estado ejecutable).
- lpThreadId: Puntero donde se almacenará el ID del hilo (puedes pasar `NULL` si no lo necesitas).

3. Ejemplo de código



Aquí tienes un ejemplo simple que muestra cómo crear y controlar un hilo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <windows.h>
#include <iostream>
 
// Función que se ejecutará en el nuevo hilo
DWORD WINAPI MyThreadFunction(LPVOID lpParam) {
    int count = *(int*)lpParam;
    for (int i = 0; i < count; i++) {
        std::cout << "Hilo en ejecución: " << i + 1 << std::endl;
        Sleep(1000); // Espera 1 segundo
    }
    return 0;
}
 
int main() {
    HANDLE hThread;
    DWORD threadId;
    int count = 5; // Número de iteraciones
 
    // Crear el hilo
    hThread = CreateThread(
        NULL,               // Atributos de seguridad
        0,                  // Tamaño de la pila
        MyThreadFunction,   // Función del hilo
        &count,            // Parámetro para la función
        0,                  // Flags de creación
        &threadId          // ID del hilo
    );
 
    if (hThread == NULL) {
        std::cerr << "Error al crear el hilo: " << GetLastError() << std::endl;
        return 1;
    }
 
    // Esperar a que el hilo termine
    WaitForSingleObject(hThread, INFINITE);
 
    // Cerrar el handle del hilo
    CloseHandle(hThread);
 
    std::cout << "Hilo finalizado." << std::endl;
    return 0;
}

4. Explicación del ejemplo



- MyThreadFunction: Esta es la función que se ejecutará en el nuevo hilo. Recibe un parámetro que indica cuántas veces debe ejecutar su bucle.
- CreateThread: Se llama para crear el hilo, pasando la función y el parámetro.
- WaitForSingleObject: Se utiliza para esperar a que el hilo termine antes de continuar con el programa principal.
- CloseHandle: Se cierra el handle del hilo para liberar recursos.

Consideraciones finales



- Asegúrate de manejar correctamente los recursos y los errores.
- Puedes crear múltiples hilos siguiendo el mismo patrón, pero ten cuidado con la sincronización si los hilos acceden a recursos compartidos.

¡Buena suerte con tu proyecto, Mikel!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar