[Alg] Programmeren en powerstates

Pagina: 1
Acties:

  • Reptile209
  • Registratie: Juni 2001
  • Nu online
't Is zondagochtend en je zit wat te denken... :+

(Hoe) Hou je in je progsels rekening met dingen als hybernate en shutdown?
Stel: je maakt een FTP-server-prog en je krijgt een windows-message dat het systeem naar hybernate of standby gaat. Laat je dan de clients die verbonden zijn netjes weten dat je down gaat, of laat je ze "onverwacht" een timeout krijgen?

Ik heb net wat op MSDN zitten zoeken naar gerelateerde zaken, maar ik kon zou snel niet een "net" lijstje vinden dat laat zien hoe je met dit soort zaken om hoort te gaan. Bovendien weet ik niet helemaal hoe je - bijvoorbeeld na een hybernate - je applicatie terugvindt nadat het systeem hervat wordt. Krijg je bijvoorbeeld bij het hervatten nog een "herinnering" dat je uit een hybernate komt, zodat je weet dat al je netwerkconnecties down zijn? Of dat een USB-stick die eerst nog aangesloten zat nu misschien weg is? Enzovoorts.

Staat er ergens een mooie "checklist" waar een app aan zou moeten voldoen om op een goede en nette manier om te gaan met hybernate/standby? 'k Heb het niet direct nodig, maar it crossed my mind :).

Zo scherp als een voetbal!


Verwijderd

Ik weet wel dat bij het afsluiten windows de WM_ENDSESSION verstuurt. Misschien geldt deze ook voor log-off en hibernate?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Het lijkt mij dat je voor een beetje betrouwbare FTP server én client er vanuit gaat dat de verbinding 'zomaar' verbroken kan worden. Dan kun je hibernation in principe gewoon negeren, omdat je toch wel code hebt die er rekening mee houdt dat de TCP sockets stuk blijken te zijn. Sockets afsluiten bij hibernation is om dezelfde reden niet echt nodig; FTP servers schoppen de client er toch wel vanaf als die lang genoeg idle is.

Een bijkomend voordeel hiervan is als het systeem maar kort suspended of hibernated is, er helemaal niets aan de hand hoeft te zijn. (Idle TCP connecties blijven dan gewoon bestaan.)

  • Reptile209
  • Registratie: Juni 2001
  • Nu online
Maar toch... ik weet dat bijvoorbeeld sockets verbroken (zouden kunnen) worden. Ergens lijkt het me toch netter om (in het geval van een server bijvoorbeeld) de clients een aankondiging te kunnen sturen dat de server down gaat. 't Is ook maar een voorbeeldje.
Als je kijkt naar mijn tweede opmerking: als ik bijvoorbeeld apparaten aansluit of verwijder tijdens een hybernate, komen applicaties daar dan op een zinvol moment achter?

Er zijn vast situaties te bedenken (hoewel er me op dit moment niet direct eentje te binnen schiet die je tijdens normaal gebruik niet met foutafhandelingen omgeeft) waarop het handig is als je weet dat het systeem wakker wordt uit een hybernate.

Zo scherp als een voetbal!


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Er zijn iig talloze applicaties die hier helemaal niet mee doen. Vele programmeurs denken dat Windows het allemaal wel regelt, maar dat is denk ik ook de reden dat hybernate en standby niet overal evengoed werkt.

Maar om het ontopic te houden: ik denk dat als je die WM_ENDSESSION gekregen hebt, je een timertje aan moet zetten die gaat proberen opnieuw te verbinden. Dat timertje zal dan volgens mij pas na het "wakker worden" voor het eerst afspelen.

日本!🎌


  • Reptile209
  • Registratie: Juni 2001
  • Nu online
_Thanatos_ schreef op zondag 30 januari 2005 @ 17:11:
Er zijn iig talloze applicaties die hier helemaal niet mee doen. Vele programmeurs denken dat Windows het allemaal wel regelt, maar dat is denk ik ook de reden dat hybernate en standby niet overal evengoed werkt.

Maar om het ontopic te houden:
<snip>
Dat eerste is eigenlijk juist het onderwerp dat ik bedoelde. Wat regelt Windows wel en niet in die situaties, en welke middelen krijg je aangereikt om het zelf te doen?

Misschien was mijn TCP/IP voorbeeld te voordehandliggend... alle protocollen daaromheen vangen eigenlijk iedere situatie al voldoende af om te weten waar je aan toe bent. :)

Een ander voorbeeld is misschien beter: stel je belt via een IR-poort met een mobieltje. Als je dan een standby of een slaapstand krijgt, is het wel verrekte handig om het mobieltje op te laten hangen voordat je app een paar uur niks meer doet.

Zo scherp als een voetbal!


Verwijderd

Het is netjes dat een server een "abort" code verstuurt. Daarnaast is het handig dat ook de client bedacht is op wegvallen van de connectie. Beter dan een "abort" is het aanbieden van alternatieve servers. Je zou kunnen denken aan clustering.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Een server die een hibernate doet? Kijk, dat je op Windows rekening moet houden met de periodieke maintenance reboot is duidelijk, maar een hibernate?
Een mobiele toepassing is een redelijkere case. In dat geval wil je sowieso rekening houden met een tijdelijke suspend (batterij op) dus eigenlijk verwacht ik dat het mobieltje daar zelf een timeout op heeft.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 11-05 08:55

sopsop

[v] [;,,;] [v]

MSalters schreef op maandag 31 januari 2005 @ 09:45:
Een server die een hibernate doet?
Hij gaf een hypothetisch voorbeeld.
Pagina: 1