Ya me he mirado bastante y he probado el codigo y luego de romperme la cabeza ya que a microsoft le gusta poner codigo complicado sin saber una mierda... lo reduje a:
Cita: #include <windows.h>
#include <stdio.h>
CRITICAL_SECTION BufferLock;
CONDITION_VARIABLE vThreadProc;
DWORD WINAPI ThreadProc (PVOID p)
{
while (true)
{
EnterCriticalSection (&BufferLock);
SleepConditionVariableCS (&vThreadProc, &BufferLock, INFINITE);
printf("Hola");
LeaveCriticalSection (&BufferLock);
Sleep (1);
}
return 0;
}
int main ( void )
{
InitializeConditionVariable (&vThreadProc);
InitializeCriticalSection (&BufferLock);
DWORD id;
HANDLE hThreadProc = CreateThread (NULL, 0, ThreadProc, (PVOID)1, 0, &id);
getchar();
WakeConditionVariable(&vThreadProc);
getchar();
return 0;
}
Por lo que veo y como me dijiste, ahorra tiempo de ejecucion y de bucles, unicamente se duerme esperando a que la variable cambie y entonces se reactiva.
Pero aun así, tiene que haber alguien que le avise y ese gastara mucha ejecución si es infinito... En algunos programas servirá... pero en otros no..
Gracias por la ayuda :)