Re: Monitoring de programme, crash
Publié : mer. 07/juil./2021 20:53
Je ne laisserai pas le lien longtemps.
Forums PureBasic - Français
https://www.purebasic.fr/french/
Code : Tout sélectionner
InitNetwork()
UseSQLiteDatabase()
Initialiser()
Initialiser_preferences()
OpenWindow_principale(gPosWindowX,gPosWindowY)
SetWindowTitle (Window_principale, "Programmation Radio Les Floralies " + #VERSION)
AddWindowTimer(Window_principale, #TIMER00, 5) ; 5 millisecondes boucle de traitements
AddWindowTimer(Window_principale, #TIMER01, 1000) ; 1 secondes ' seconde affichage
AddWindowTimer(Window_principale, #TIMER02, 1000 * 5) ; 5 secondes
AddWindowTimer(Window_principale, #TIMER03, 1000 * 30) ; 30 secondes
AddWindowTimer(Window_principale, #TIMER04, 1000 * 10) ; 10 secondes
AddWindowTimer(Window_principale, #TIMER05, 60) ; 60 milisecondes
Initialiser_suite()
Initialiser_canvas_principal()
BddTrace_Initialiser_base()
FMod_Initialiser()
Ajouter_au_log ("Démarrage du programme...", #LOG_DEMARRAGE)
Afficher_message (#ACCUEIL)
If gbLancerFichierAuDemarrage = #True
gTemps_lancement_fichier_demarrage = ElapsedMilliseconds()
Ajouter_au_log ("Démarrage auto du fichier de programmation par défaut dans " + #TEMPS_DEMARRAGE_AUTO + " secondes / bouton STOP pour annuler ...", #LOG_DEMARRAGE)
Afficher_message ("Démarrage auto du fichier de programmation par défaut dans " + #TEMPS_DEMARRAGE_AUTO + " secondes / bouton STOP pour annuler ...")
EndIf
AddKeyboardShortcut (Window_principale, #PB_Shortcut_Control|#PB_Shortcut_D, 1)
AddKeyboardShortcut (Window_principale, #PB_Shortcut_Control|#PB_Shortcut_T, 2)
Global Event
Repeat
Event = WaitWindowEvent(#TEMPS_BOUCLE_EVENTS_MS) ; avec #TEMPS_BOUCLE_EVENTS_MS = 20
Select Event
Case 0 ; plus d'événement en cours : zone pour le multitache
SetGadgetText(Text_multitache, "Coordonnées : " + Str(DesktopMouseX()) + "," + Str(DesktopMouseY()))
Case #PB_Event_Menu
Select EventMenu()
Case 1
Ouvrir_fenetre_direct_manuel()
Case 2
Terminer_direct_manuel()
EndSelect
Case #PB_Event_CloseWindow
gFini = Quitter()
Case #PB_Event_Gadget ; on a reçu un message en provenance d'un gadget PureBasic
Select EventGadget()
Case Checkbox_verrouiller_interface
If GetGadgetState (Checkbox_verrouiller_interface) = #PB_Checkbox_Checked
Verrouiller_interface()
Else
Deverrouiller_interface()
EndIf
Case Checkbox_remplir_direct_programme
If GetGadgetState (Checkbox_remplir_direct_programme) = #PB_Checkbox_Checked
gbRemplirCageDirect = #True
Else
gbRemplirCageDirect = #False
EndIf
Case Button_jouer
If gEtat_lecture = #LECTURE_LISTE_OFF
Changer_etat_lecture(#LECTURE_LISTE_INIT)
Else
MessageRequester("ERREUR", "La playlist est déjà en cours de lecture !", 0)
EndIf
Case Checkbox_affichage_onde
If GetGadgetState (Checkbox_affichage_onde) = #PB_Checkbox_Checked
gbAfficherOnde = #True
Else
Dessiner_cadre_vide()
gbAfficherOnde = #False
EndIf
Case Button_nouveau
Creer_nouvelle_programmation()
Case Button_charger
Charger_programmation()
Case Button_sauvegarder
Sauvegarder_programmation()
Case Button_passer
Forcer_passage_element_suivant()
Case Button_pause
Basculer_pause()
Case Button_stop
Envoyer_infos_site_arret_webradio()
Arreter_son()
...
Case Button_generer_programme
Envoyer_infos_site_lancement_webradio()
SetGadgetState (Checkbox_generer_programme_automatique, #PB_Checkbox_Checked)
Generer_programme(0, #False)
Case Button_requete_charger
Requete_charger()
Case Button_requete_sauver
Requete_sauver()
EndSelect
Case #PB_Event_Timer
Select EventTimer()
Case #TIMER00
FMOD_update()
If gEtat_lecture <> #LECTURE_LISTE_OFF
If gEtat_lecture <> #LECTURE_LISTE_INIT
Determiner_changement_jour()
EndIf
EndIf
If gPauseLecture = #False
If FMOD_EtreSon (@gSonLu) = #True
If FMOD_Determiner_EstArrete (@gSonLu) = #False ;par choix ne déclenche pas une interruption si aucun son n'est lu ou en pause
Gerer_declenchement_interruption()
EndIf
EndIf
EndIf
Select gEtat_lecture
Case #LECTURE_INTERRUPTION_DEBUT
Jouer_interruption()
Case #LECTURE_INTERRUPTION_ENCOURS
Gerer_lecture_interruption()
Case #LECTURE_INTERRUPTION_FIN
Terminer_lecture_interruption()
If gbChangerDeJourEnsuite = #True
gbChangerDeJourEnsuite = #False
Changer_etat_lecture (#LECTURE_CHANGEMENT_JOUR)
EndIf
Case #LECTURE_LISTE_OFF
; rien
Case #LECTURE_CHANGEMENT_JOUR
Ajouter_au_log ("Changement de jour.", #LOG_DEMARRAGE)
Arreter_son()
Initialiser()
Initialiser_suite()
gbLancerFichierAuDemarrage = #False
Charger_liste(#False)
Charger_interruption()
gItem_lecture = 0
Initier_lecture_liste()
PreCharger_et_jouer_element_liste(gItem_lecture)
Case #LECTURE_LISTE_FORCER_LECTURE_ELEMENT
Forcer_lecture_element_playliste()
Case #LECTURE_LISTE_ON
Passer_element_lecture_suivant()
Case #LECTURE_LISTE_INIT
If GetGadgetState (Checkbox_commencer_lecture_playliste_debut) = #PB_Checkbox_Checked
Charger_liste(#False)
gItem_lecture = 0
Else
If gbRepriseEtatRealisee = #False
Recuperer_dernier_etat()
Charger_liste(#True)
If Etat\Jour = Str(Day(Date()))
gItem_lecture = Val (Etat\Id_dernier_lu)
Else
gItem_lecture = 0
EndIf
gbRepriseEtatRealisee = #True
Else
Charger_liste(#False)
gItem_lecture = 0
EndIf
EndIf
Charger_interruption()
Initier_lecture_liste()
PreCharger_et_jouer_element_liste(gItem_lecture)
Case #LECTURE_LISTE_ITEM_PRET
If Tableau_elements(gItem_lecture)\bMultiFichiers = #False
Jouer_element_liste_charge(gItem_lecture+1)
Else
Jouer_element_liste_charge(gItem_lecture) ; correction juste pour afficher le titre du bon fichier actuellement lu.
EndIf
Changer_etat_lecture(#LECTURE_LISTE_ITEM_EN_COURS)
If Tableau_elements(gItem_lecture)\bMultiFichiers = #False
Passer_element_lecture_suivant()
Else
If Tableau_elements(gItem_lecture)\NumFic = 4
Passer_element_lecture_suivant()
EndIf
; ne change pas d'index si multifichier !
EndIf
Case #LECTURE_LISTE_ITEM_SUIVANT
Passer_element_lecture_suivant()
Case #LECTURE_LISTE_ITEM_EN_COURS
If gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
gbItem_lecture_presque_finie = Determiner_lecture_element_liste_presque_finie()
If gbItem_lecture_presque_finie = #True
gIndex_trouve = Donner_index_element_suivant(gItem_lecture)
If gIndex_trouve <> -1
If Tableau_elements (gIndex_trouve)\Titre <> "<DIRECT>"
gbRetourPrechargement = PreCharger_element_liste(gIndex_trouve)
Select gbRetourPrechargement
Case #LECTURE_LISTE_ITEM_CHARGEMENT_OK
; rien
Case #LECTURE_LISTE_ITEM_CHARGEMENT_MAX_ERREURS
Ecrire_dernier_etat (gFichierPlayliste$, Tableau_elements(gIndex_trouve)\Code, Tableau_elements(gIndex_trouve)\Id, #True, Tableau_elements(gIndex_trouve)\NbRotations)
Terminer_programme_erreur()
Case #LECTURE_LISTE_ITEM_CHARGEMENT_TENTER_ELEMENT_SUIVANT
Changer_etat_lecture(#LECTURE_LISTE_ITEM_SUIVANT)
EndSelect
Else
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_C_EST_UN_DIRECT
EndIf
Else ;
gbRetourPrechargement = #LECTURE_LISTE_ITEM_FINDELISTE
EndIf
EndIf
EndIf
If Determiner_lecture_element_finie() = #True
If gEtat_lecture <> #LECTURE_LISTE_FORCER_LECTURE_ELEMENT_SUIVANT
Select gbRetourPrechargement
Case #LECTURE_LISTE_ITEM_CHARGEMENT_C_EST_UN_DIRECT
Changer_etat_lecture(#LECTURE_CAGE_DIRECT_DEBUT)
Case #LECTURE_LISTE_ITEM_FINDELISTE
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
Changer_etat_lecture(#LECTURE_LISTE_BOUCLER)
Default
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
Changer_etat_lecture(#LECTURE_LISTE_ITEM_PRET)
EndSelect
EndIf
EndIf
Case #LECTURE_LISTE_FORCER_LECTURE_ELEMENT_SUIVANT
gIndex_trouve = Donner_index_element_suivant(gItem_lecture)
; gIndex_trouve = Donner_index_element_suivant(gItem_lecture) ; doublon de ligne = bug ou volontaire ?
If gIndex_trouve <> -1
If Tableau_elements (gIndex_trouve)\Titre <> "<DIRECT>"
gbRetourPrechargement = PreCharger_element_liste(gIndex_trouve)
Select gbRetourPrechargement
Case #LECTURE_LISTE_ITEM_CHARGEMENT_OK
; rien
Case #LECTURE_LISTE_ITEM_CHARGEMENT_MAX_ERREURS
Ecrire_dernier_etat (gFichierPlayliste$, Tableau_elements(gIndex_trouve)\Code, Tableau_elements(gIndex_trouve)\Id, #True, Tableau_elements(gIndex_trouve)\NbRotations)
Terminer_programme_erreur()
Case #LECTURE_LISTE_ITEM_CHARGEMENT_TENTER_ELEMENT_SUIVANT
Changer_etat_lecture(#LECTURE_LISTE_ITEM_SUIVANT)
EndSelect
Else
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_C_EST_UN_DIRECT
EndIf
Else ;
gbRetourPrechargement = #LECTURE_LISTE_ITEM_FINDELISTE
EndIf
Select gbRetourPrechargement
Case #LECTURE_LISTE_ITEM_CHARGEMENT_C_EST_UN_DIRECT
Changer_etat_lecture(#LECTURE_CAGE_DIRECT_DEBUT)
Case #LECTURE_LISTE_ITEM_FINDELISTE
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
Changer_etat_lecture(#LECTURE_LISTE_BOUCLER)
Default
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
Changer_etat_lecture(#LECTURE_LISTE_ITEM_PRET)
EndSelect
Case #LECTURE_LISTE_ITEM_FINIE
Passer_element_lecture_suivant()
Case #LECTURE_LISTE_TERMINEE
Terminer_lecture_liste()
Case #LECTURE_LISTE_BOUCLER
Boucler_lecture_liste()
Case #LECTURE_CAGE_DIRECT_DEBUT
Debuter_cage_direct_programme()
Passer_element_lecture_suivant()
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
gIndex_trouve = Donner_index_element_suivant(gItem_lecture)
If gIndex_trouve <> -1
gbRetourPrechargement = PreCharger_element_liste(gIndex_trouve)
Select gbRetourPrechargement
Case #LECTURE_LISTE_ITEM_CHARGEMENT_OK
Case #LECTURE_LISTE_ITEM_CHARGEMENT_MAX_ERREURS
Ecrire_dernier_etat (gFichierPlayliste$, Tableau_elements(gIndex_trouve)\Code, Tableau_elements(gIndex_trouve)\Id, #True, Tableau_elements(gIndex_trouve)\NbRotations)
Terminer_programme_erreur()
Case #LECTURE_LISTE_ITEM_CHARGEMENT_TENTER_ELEMENT_SUIVANT
Changer_etat_lecture(#LECTURE_LISTE_ITEM_SUIVANT)
EndSelect
Else
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
Changer_etat_lecture(#LECTURE_LISTE_BOUCLER)
EndIf
Case #LECTURE_CAGE_DIRECT_ENCOURS
Maj_cage_direct_programme()
Case #LECTURE_CAGE_DIRECT_FIN
Terminer_cage_direct_programme()
Afficher_message ("La cage direct est terminée lance le fichier préchargé !")
Ajouter_au_log ("La cage direct est terminée lance le fichier préchargé !", #LOG_NORMAL)
Envoyer_message_retour_diffusion ("La cage direct est terminée lance le fichier préchargé !")
gbRetourPrechargement = #LECTURE_LISTE_ITEM_CHARGEMENT_RESET
Changer_etat_lecture(#LECTURE_LISTE_ITEM_PRET)
EndSelect
Case #TIMER01
Gerer_barres_information()
Gerer_lancement_automatique_fichier_programmation()
Gerer_affichage_lectures_playliste()
Raffraichir_stats()
Case #TIMER02
Gerer_action_serveur()
Case #TIMER03
Envoyer_message_site("Effacement fichier report fonctionnement.", "Effacer")
If gEtat_lecture = #LECTURE_CAGE_DIRECT_ENCOURS
Envoyer_message_site("En ligne : " + Donner_jouer_et_heure() + " - EN DIRECT ! - ", "Ecrire")
Else
If GetGadgetState (Checkbox_direct_manuel_donnees_off) = #PB_Checkbox_Checked
Envoyer_message_site("En ligne : " + Donner_jouer_et_heure() + " - EN DIRECT ! - ", "Ecrire")
Else
Envoyer_message_site("En ligne : " + Donner_jouer_et_heure(), "Ecrire")
EndIf
EndIf
Case #TIMER04
Afficher_stats()
Case #TIMER05
If gbAfficherOnde = #True
Gerer_affichage_onde_sonore()
EndIf
EndSelect
EndSelect
Until gfini
Envoyer_infos_site_arret_webradio()
FMOD_Fermer()
End