Lo cierto es que, como te dice Martin Galván, usa el estándar siempre que puedas.
Respecto al tema de los eventos, la idea es la siguiente (ojo que voy de cabeza, puede haber errores en los nombres de las funciones, pero no en el concepto):
CreateEvent te devuelve un handle a un evento. Ese evento puede estar “Set” o “Raised”. Si está Set, WaitForSingleObject se detiene hasta que el evento pasa a Raised o transcurre el tiempo que le has especificado. Para ver si caducó el tiempo de espera o retornó porque el evento se disparó, consulta el valor devuelto.
Por lo tanto, en cualquier thread (incluso justo antes de llamar a Wait…), tu llamas a SetEvent con el handle adecuado. Y cuando quieras que Wait… salga y continue, llama a ResetEvent (Ojo que podría ser al revés, ResetEvent el que bloquea a Wait… y SetEvent el que lo libera, nunca me acuerdo y siempre tengo que mirar la documentación para ver qué hace cada cual).
Respecto a lo de Windows.h, y para complementar a Martín, el desarrollo “a la” Windows, o como el compilador de Microsoft espera, es tener un par de ficheros, StdAfx.h/.cpp (últimamente afx.h/.cpp, san Bill Gates sabrá por qué lo han cambiado), en donde el cpp incluye al h, y el h contiene toda la parafernalia de llamar a toda la cosa específica de Windows, MFC, WFC y demás parafernalia windowsera de Microsoft. Luego, en cada fichero que use algo de windows, incluyes stdafx.h (o afx.h) y listo. Yo suelo añadir ahí también algunos cabeceras del estándar, como string, vector, map y alguno más.
¿Por qué? Porque eso ayuda enormemente al compilador a compilar siempre la misma parte de manera igual, en Visual C++ con ayuda de las cabeceras precompiladas (en el C++Builder algo parecido que no me acuerdo cómo se llama), y supongo que el gcc tenga algo similar, pero si no lo tiene, el hecho de que una parte de siempre el mismo resultado, acelera la cosa por las simples cachés del sistema operativo. Esto también te ayuda a los tiempos de compilación. En cuanto tienes un stdafx.h estable, al menos en visual c++, se genera un fichero pch que acelera un montón el proceso de compilación, lo que, añadido a más mejoras en visual studio 2019, a veces solo compila las líneas de código que has cambiado dentro de un fichero, y eso sin contar con el linkado incremental, que es una cosa que por cierto “inventó” Borland y que MS tardó a implementar pero que ahora, por ejemplo mi proyecto, 6,5 millones de líneas de código, tarda menos de dos segundos a compilar cualquier cambio razonable aunque sea en varios ficheros.
Por otro lado, la estructura de windows.h (que hoy en día es un “placeholder” que va incluyendo otro montón de cabeceras), tiene algunos problemas si no se realiza la inclusión de ficheros en el orden adecuado. Primero va windows.h y luego los que quieras que windows.h no haya incluido.
Y respecto a lo de la carga de las bibliotecas, puede ser que haya un bug en codeblocks, porque lo que hace Visual C++ para saber qué LIB incluir (lib “de importación”, como te comenta Martín), añade una serie de metadatos diferentes al nombre para ver si es la biblioteca de 32 bits, de 64 bits, estática, dinámica, spectre mitigation, fucsia de-la-muette, …, según tengas definido en el Visual Studio qué arquitectura estás usando, y puede que eso lo esté haciendo mal codeblocks y esté intentando enlazar la lib de 32 bits cuando tendría que haberlo hecho con la de 64, etc..
> --
> --
> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
> En caso de duda visita "
http://groups.google.com/group/cppba"
> ---
> Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a
cppba+un...@googlegroups.com.
> Para ver este debate en la Web, visita
https://groups.google.com/d/msgid/cppba/cd3aedfe-044c-4105-946b-1d79eafc88d6o%40googlegroups.com.