[v4 beta1] Problème ThreadSafe? [Résolu]

Archive.
popstatic
Messages : 83
Inscription : lun. 20/sept./2004 18:21
Localisation : derriere toi fais gaffe!

[v4 beta1] Problème ThreadSafe? [Résolu]

Message par popstatic »

Bonsoir à tous, petit dysfonctionnement que j'ai put constater, à vous de me dire si c'est une erreur de ma part ou un bug:

La compilation de ce code:

Code : Tout sélectionner

OpenConsole()

#INTERNET_CONNECTION_CONFIGURED =$40
#INTERNET_CONNECTION_LAN = $02
#INTERNET_CONNECTION_MODEM =$1
#INTERNET_CONNECTION_MODEM_BUSY =$8
#INTERNET_CONNECTION_OFFLINE =$20
#INTERNET_CONNECTION_PROXY =$4
#INTERNET_RAS_INSTALLED =$10

Procedure.l CheckInternetConnection()
    Retour.l
    InternetGetConnectedState_(@Retour, 0)
    Select Retour
        Case #INTERNET_CONNECTION_CONFIGURED
            PrintN("#INTERNET_CONNECTION_CONFIGURED")
        Case #INTERNET_CONNECTION_LAN
            PrintN("#INTERNET_CONNECTION_LAN")
        Case #INTERNET_CONNECTION_MODEM
            PrintN("#INTERNET_CONNECTION_MODEM")
        Case #INTERNET_CONNECTION_MODEM_BUSY
            PrintN("#INTERNET_CONNECTION_MODEM_BUSY")
        Case #INTERNET_CONNECTION_OFFLINE
            PrintN("#INTERNET_CONNECTION_OFFLINE")
        Case #INTERNET_CONNECTION_PROXY 
            PrintN("#INTERNET_CONNECTION_PROXY ")
        Case #INTERNET_RAS_INSTALLED 
            PrintN("#INTERNET_RAS_INSTALLED ")
    EndSelect
    
    PrintN("Valeur de retour: "+Str(Retour))
EndProcedure

PrintN("Determination de La configuration reseau...")
CreateThread(@CheckInternetConnection(),1)
Input()
Avec l'option Threadsafe produit un executable qui va buguer (invalid memory access).
Il ne bugue pas s'il n'est pas compilé avec cette option!

je m'interroge donc....
Asus bien? asus tres bien!
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Dans la doc (3.94) tu verras que CreateThread prends deux paramètres, le premier c'est l'adresse de la procédure et le second c'est l'argument de la procédure:

Code : Tout sélectionner

OpenConsole() 

#INTERNET_CONNECTION_CONFIGURED =$40 
#INTERNET_CONNECTION_LAN = $02 
#INTERNET_CONNECTION_MODEM =$1 
#INTERNET_CONNECTION_MODEM_BUSY =$8 
#INTERNET_CONNECTION_OFFLINE =$20 
#INTERNET_CONNECTION_PROXY =$4 
#INTERNET_RAS_INSTALLED =$10 

Procedure.l CheckInternetConnection(valeur.l) ; <--- ICI
    Retour.l 
    InternetGetConnectedState_(@Retour, 0) 
    Select Retour 
        Case #INTERNET_CONNECTION_CONFIGURED 
            PrintN("#INTERNET_CONNECTION_CONFIGURED") 
        Case #INTERNET_CONNECTION_LAN 
            PrintN("#INTERNET_CONNECTION_LAN") 
        Case #INTERNET_CONNECTION_MODEM 
            PrintN("#INTERNET_CONNECTION_MODEM") 
        Case #INTERNET_CONNECTION_MODEM_BUSY 
            PrintN("#INTERNET_CONNECTION_MODEM_BUSY") 
        Case #INTERNET_CONNECTION_OFFLINE 
            PrintN("#INTERNET_CONNECTION_OFFLINE") 
        Case #INTERNET_CONNECTION_PROXY 
            PrintN("#INTERNET_CONNECTION_PROXY ") 
        Case #INTERNET_RAS_INSTALLED 
            PrintN("#INTERNET_RAS_INSTALLED ") 
    EndSelect 
    
    PrintN("Valeur de retour: "+Str(Retour)) 
EndProcedure 

PrintN("Determination de La configuration reseau...") 
CreateThread(@CheckInternetConnection(),1) 
Input()
Il faut donc déclarer ta procédure avec l'argument.

Maintenant p-ê que le compilateur devrait vérifier le nombre d'arguments pour avoir un message d'erreur plus parlant.
Vive le thread-safe !
Répondre