Page 1 sur 1
[OK] Thread et debug
Publié : mer. 02/juin/2010 21:13
par Ar-S
Ce code fonctionne
Code : Tout sélectionner
Procedure.s Toctoc()
MessageRequester("Thread","Toctoc")
EndProcedure
MessageRequester("1","Le thread va se lancer et le requester 2 va s'ouvrir en même temps")
toc=CreateThread(@Toctoc(), 0)
MessageRequester("2","Qui est là ?")
KillThread(toc)
End
mais si je lance le debugger, j'ai un message d'erreur :
"The procedure specified in '@ProcedureName()' does not have the required argument or returntype."
C'est grave docteur ?
Re: Thread et debug
Publié : mer. 02/juin/2010 21:28
par Backup
faut pas typer tes procedure dans un thread !
Code : Tout sélectionner
Procedure Toctoc(*bidon)
MessageRequester("Thread","Toctoc",#PB_MessageRequester_Ok)
EndProcedure
MessageRequester("1","Le thread va se lancer et le requester 2 va s'ouvrir en même temps")
toc=CreateThread(@Toctoc(), 0)
MessageRequester("2","Qui est là ?")
KillThread(toc)
End
mais ce code ne marche pas non plus parceque il ne peut y avoir qu'un requester en meme temps ! (apparemment)
Re: Thread et debug
Publié : mer. 02/juin/2010 21:55
par G-Rom
Code : Tout sélectionner
Procedure.s Toctoc(*bidon)
MessageRequester("Thread","Toctoc",#PB_MessageRequester_Ok)
EndProcedure
Elle renvoie rien ta procédure.
de plus renvoyer un string dans un thread n'est pas possible il me semble.
tu peut renvoyer un pointeur , ou modifier une chaine via un pointeur sans retour de valeur comme ceci par exemple :
Code : Tout sélectionner
Procedure.i MyThread(*Pointer.i)
Chaine.s = PeekS(*Pointer)
Chaine = ReplaceString(Chaine,"O","U")
PokeS(*Pointer,Chaine,Len(Chaine))
EndProcedure
Text$ = "COOL!"
ThreadID = CreateThread(@MyThread(),@Text$)
While IsThread(ThreadID)
Wend
Debug Text$
Re: Thread et debug
Publié : jeu. 03/juin/2010 0:32
par Ar-S
Merci,
faut pas typer tes procedures
Qu'entends tu par typer ? (le .s ?)
Ce qui est bizarre est que le code que j'ai posté fonctionne bien sans le debugger..
C'était pour l'exemple, j'utilise pas un thread pour du requester

mais pour ne pas freezer ma fenêtre principale lorsque mon prog calcule des MD5 de plusieurs fichiers. En gros j'appelle ma procédure en Thread et ça marche mais j'ai la même erreur si je lance le debug.
Re: Thread et debug
Publié : jeu. 03/juin/2010 7:09
par Backup
Ar-S a écrit :Merci,
faut pas typer tes procedures
Qu'entends tu par typer ? (le .s ?)
oui
Ce qui est bizarre est que le code que j'ai posté fonctionne bien sans le debugger..
ben c'est que ça ne fonctionne pas

sans debugger tu suprime par le fait les messages d'erreurs , mais elles sont quand meme là
les erreurs , et finiront par planter ton systeme a un moment ou un autre ...

Re: Thread et debug
Publié : jeu. 03/juin/2010 11:43
par Ar-S
Y'a pas à dire j'ai un problème de compréhension pour les threads
Malgré les exemples du fofo, malgré la doc (vraiment trop pauvre de ce coté), je n'ai pas la moindre idée de comment syntaxer la procédure (ou le thread).
En gros lors du glissé déposé j'ai
Code : Tout sélectionner
Select EventWindow()
Case 0
If event=#PB_Event_WindowDrop
StickyWindow(0,0) ; on évite le 1er plan pour les messagerequester à venir
;- Création de la liste
ClearList(fichier())
ClearList(MD5())
NomFichier$=EventDropFiles()
NbrFichier = CountString(NomFichier$, Chr(10)) + 1
If NbrFichier>0
;Si il y a des fichiers on lance la procedure en Thread pour ne pas freezer la fenêtre
MD5LIST=CreateThread(@CreateList(), 0) ; JE LANCE MA PROCEDURE ICI
Else
;(...blabla....)
EndIf
EndIf
EndSelect
Et voilà la procédure (j'ai juste enlever l'écriture du fichier list car là n'est pas le soucis)
Code : Tout sélectionner
Procedure CreateList() ; Procedure lancé au drag n drop
For i = 1 To NbrFichier
MonFichier$ = StringField(NomFichier$, i, Chr(10))
Resultat = FileSize(MonFichier$)
NomCourt$=GetFilePart(MonFichier$)
InfoRep$=GetPathPart(MonFichier$)
If Resultat<>-2 ; Si ce n'est pas un répertoire...------------
setgadgettext(1,nomcourt$)
MD5$ = MD5FileFingerprint(MonFichier$)
AddElement(fichier())
fichier()=NomCourt$
AddElement(MD5())
MD5()=MD5$
repAfichier$=GetPathPart(MonFichier$)
Else
;(----blabla----)
EndIf
Next i
NbrAtraiter=ListIndex(fichier())+1
;Si il y a au moins 1 fichier à traiter, on sauve
If NbrAtraiter>0
SetGadgetText(1,Str(NbrAtraiter)+" files have been checked.")
;sauvegarde-------------------------------------------
TitreSauve$="Saving Md5 List"
sauvegarde:
StickyWindow(0,0)
Sauve$=SaveFileRequester(TitreSauve$,repAfichier$+"md5list",filtre$,0)
If Sauve$
;On remet les listes à 0 et on reinitialise TailleFichier---
ResetList(fichier())
ResetList(MD5())
TailleFichier=0
;Création du fichier liste----------------------------------
;(..code d'écriture fichier liste...)
Else
EndIf
StickyWindow(0,1)
KillThread(MD5LIST)
EndIf
EndProcedure
Re: Thread et debug
Publié : jeu. 03/juin/2010 17:28
par Geo Trouvpatou
Salut.
Comme te l'a dit Dobro, ce n'est pas
Procedure CreateList() que tu dois écrire, mais
Procedure CreateList(*parametre_bidon_qui_sert_pas_forcement)
Et comme
Procedure CreateList(*parametre_bidon_qui_sert_pas_forcement) est ton Thread, ce n'est donc pas dedans qu'il faut mettre le KillThread.
regardes bien l'exemple de la doc.
[EDIT] Regardes les deux exemples que j'avais mis
ici.
Re: Thread et debug
Publié : jeu. 03/juin/2010 17:46
par Ar-S
Ahhhh mais tout simplement ! putain des fois je cherche de midi à 14h pour rien.
C'est fou ce paramètre *bidon quand même ! en effet le debug ne couine plus et j'ai viré mon killthread de la proce.