Page 1 sur 1

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

Publié : lun. 06/févr./2006 3:56
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....

Publié : lun. 06/févr./2006 21:24
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.