via http://www.aeroxp.org/2009/01/lesson-on-infinite-loops/ revelan el codigo que causo la falla global del Microsoft Zune de 30gb. Es tan simple que da pena…a ver si la cachan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #define ORIGINYEAR 1980 BOOL ConvertDays(UINT32 days, SYSTEMTIME* lpTime) { int dayofweek, month, year; UINT8 *month_tab; //Calculate current day of the week dayofweek = GetDayOfWeek(days); year = ORIGINYEAR; while (days > 365) { if (IsLeapYear(year)) { if (days > 366) { days -= 366; year += 1; } } else { days -= 365; year += 1; } } // Determine whether it is a leap year month_tab = (UINT8 *)((IsLeapYear(year))? monthtable_leap : monthtable); for (month=0; month<12; month++) { if (days <= month_tab[month]) break; days -= month_tab[month]; } month += 1; lpTime->wDay = days; lpTime->wDayOfWeek = dayofweek; lpTime->wMonth = month; lpTime->wYear = year; return TRUE; } |
No estoy seguro.. pero supongo que cuándo días es igual a 366 se cicla la rutina..
Achis, y cómo le hace para saber si el mes es de 30 días o de 28 o de 31?
Digo, lo mio, lo mío, lo mio no es la programación, pero no veo como el puede hacer ese escrito para saber en que mes esta y cuantos días tiene.
A lo mejor hasta tiene otros detalles, pero asumo que sabe que el día tiene 24 horas y que sabe contarle los minutos y los segundos.
No? no me saque ni medio punto?
Chale!!!!!
Cosmo
Creo que el problema es que no sabemos leer, a mi me pasa muy seguido. Si la liga es “http://www.aeroxp.org/2009/01/lesson-on-infinite-loops/” deduzco que hay un loop infinito ahí. Creo que esto:
Lo que puede ocasionar el loop infinito es que los días pueden ser 366 (mayores a 365 entrar a IsLeapYear(year)) y nunca mayores a 366 (nunca entrar a days > 366) y dar vueltas … y vueltas … y vueltas …
)
Para que ninguna condición se cumpla tiene que tratarse de un año bisiesto de 366 días. Y, desde que recuerdo, todos los años bisiestos que me han tocado han sido de 366 días…. Luego entonces se trata de un loop muy recurrente. Se volverá a presentar en 2012 si es que alguien todavía sigue conservando (sin actualización de firmware) uno de esos aparatos…….