Oha...
also while(1) für etwas anderes zu benutzen als die Hauptschleife eines Programms ist aber ganz ganz böse.


Viele Probleme ähnlich dem von dir beschriebenen lassen sich recht bequem mit einer sog. state-machine lösen

implementieren kann man sowas mit einem großen Switch-Block:
(der seinerseits in einer Funktion sitzt welche zyklisch aufgerufen wird)

Code:
switch(zustand)
{
	case zustand1:
		blablubb
		zustand = zustand2;
		break;
	case zustand2:
		blablubb
		zustand = zustand3;
		t = Zeit;
		break;
	case zustand3:
		if(Zeit - t > Wartezeit)
		{
			blablubb
			zustand = ....
		}
	case zustand4:
		...
		...
		...
}
natürlich kann man beliebig zwischen den Zuständen hin und her springen, man muss nicht immer so linear vom einen zum nächsten wie hier dargestellt. Wartezeiten lassen sich auch sehr leicht realisieren, denn man muss sich nur den Startzeitpunkt merken und dann bei jedem Aufruf überprüfen ob die Wartezeit schon abgelaufen ist oder nicht.