Vykdyti ir laukti

Amžinai programuotojams skirtuose žurnaluose ir Internet diskusijų srityse kyla klausimai, kaip pradėti vykdyti kitą programą (ypač daugeliui neaišku, kaip valdyti MS-DOS programas) ir palaukti, kol ji baigs darbą. Dažniausiai siūlomi sprendimai yra pakankamai sudėtingi, nes "žaidžiama", pvz., pranešimų apie įvykius ("Notify") analize.

Čia pasiūlomas paprastas, veikiantis ir lengvai suprantamas būdas. Man tik neaišku, kaip stipriai sistemą užima amžinas tikrinimo ciklas?

#include 
BOOL SpawnAndWait(LPSTR strDOSCall)
{ static WORD wRetCode = WinExec(strDOSCall, SW_HIDE);
  char szModuleName[128];
  if (wRetCode < 32)  return TRUE;  // Klaida!
  while (GetModuleFileName(wRetCode, szModuleName, sizeof(szModuleName)))
  { // Laukti arba lygiagrečiai atlikti kokius nors kitus veiksmus
    // Gal būt patikrinti, ar ne per ilgai užtruko laukimas...
  }
  // MS-DOS programa baigė darbą
  return FALSE;
} // end SpawnAndWait

Pateiktame pavyzdėlyje "SpawnAndWait" funkcijai perduodama MS-DOS failo vardas (geriausia .PIF). "While" cikle tikrinama, koks modulio vardo ilgis, - kai tikrinamas procesas baigia darbą, grąžinama nulinė reikšmė, - tai požymis, kad reikia baigti "ciklinti".