allora, uso visual studio 2010 ultimate e il suo debugger.

Ho deciso di postare il codice completo della funzione nella quale viene chiamata foo..ossia RiempiStruttura

codice:
int Client::MainLoop(PVOID data)
{
CreateThread(0,0,(LPTHREAD_START_ROUTINE)RemoveKeyForResidence,NULL,0,0);
CreateThread(0,0,(LPTHREAD_START_ROUTINE)OnlineLoop,NULL,0,0);

for(int leave = false, uscire = false; uscire == false; leave = false)
	{
	static int regola_latenza = 20;
	string sorgente_pagina = Client::GetDataFromServer("classes.php?request=ViewCommandFromQueueUsingID&id=" + ID);

	if(sorgente_pagina == "")
		{
        regola_latenza++;
		leave = true;
		switch(regola_latenza)
			{
			/*
			3.75 secondi    -> 1  secondo
			8.75 secondi    -> 1.3 secondi
			21.75 secondi   -> 1.5 secondi
			36.75 secondi   -> 2.5 secondi
			1.1.75 minuti   -> 15 secondi
			2.16.75 minuti  -> 60 secondi
			*/
			case 0: Client::latenza = 750; break;
			case 5: Client::latenza = 1000; break;
			case 10: Client::latenza = 1300; break;
			case 20: Client::latenza = 1500; break;
			case 30: Client::latenza = 2500; break;
			case 40: Client::latenza = 15000; break;
			case 45: Client::latenza = 60000; break;
			}
		}
	else
		{
		regola_latenza = 0;
		}

	comando cmd;

	//riempie la struttura di dati
	if(leave == false)
		cmd = Client::RiempiStruttura(sorgente_pagina);
        
        //etc etc etc...questa parte non interessa più sorgente pagina
	Sleep(Client::latenza);
	}

return 0;
}