Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 14:45
Sleep in einem Thread ist auch nicht gut. Wenn das System runter fährt, benachrichtigt es Dein Programm, das muss sich in einer kurzen Zeit beenden können, sonst wird es als eingefroren angezeigt.
Das kann man umgehen, indem man statt Sleep einfach MSDN-Library durchsuchenWaitForSingleObject mit einem Event (bzw. die entsprechende Kapselung TEvent ) verwendet. Das Event lässt man permanent auf nonsignaled, bis man von Windows die WM_QUERYENDSESSION bzw. WM_ENDSESSION Nachricht erhält. Sobald man das Event dann aktiviert, arbeiten alle Threads unmittelbar weiter, ohne auf das Timeout zu warten. Im Thread selbst sollte man dann noch die Rückgabe von WaitForSingleObject prüfen, und die Bearbeitung entsprechend sofort einstellen, wenn nicht WAIT_TIMEOUT zurückgegeben wurde.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat