API - Est il possible de définir un temps d'execution d'une fonction

API - Est il possible de définir un temps d'execution d'une fonction - Programmation

Marsh Posté le 25-01-2001 à 16:58:26    

Re hug!
 
voilà, j'aimerai savoir si il existe une API qui permettrait de limiter le temps d'exécution d'une fonction (il existe des APIs qui peuvent agir sur les EXE)
 
Je m'explique :
dans mon code g une fonction qui bloque, et j'aimerais lui allouer un temps de vie maximum, si celle ci atteint ce quota sans avoir fini son traitement, il faudrait que l'on en sortess
Est ce possible ? et si oui comment ?
Compris ?
 
Merci

 

Reply

Marsh Posté le 25-01-2001 à 16:58:26   

Reply

Marsh Posté le 25-01-2001 à 18:06:38    

Cette fonction est bloquante volontairement? et pourquoi?ss
 
sinon tu peux utiliser les timers ou un WaitForSingleObject, WaitMessage etc ....

Reply

Marsh Posté le 25-01-2001 à 18:13:05    

même réponse...
a mon avis, tu mets un timer. Quand ce timer est écoulé, il appelle une callback. dans cette callback, tu indique à la fonction qu'elle doit s'arreter (soit en générant un evenement, soit en armant un flag, a toi de voir). L'avantage avec le timer, c'est que c'est la fonction elle même qui regarde régulièrement si elle doit s'arreter.

Reply

Marsh Posté le 26-01-2001 à 18:53:08    

non la fonction n'est pas bloquante volontairement, c juste un truc mal foutu de microsoft ..
par contre pour le timer je ne vois pas comment l'implémenter, en effet g pas la main sur la fonction , cune API directement issu d'une DLL windows (wininet.dll)
 
jsuis grave dans la me***

 

Reply

Marsh Posté le 26-01-2001 à 21:17:28    

qu'est ce qui bloque dans ta fonction, faudrais peut etre essayer de résoudre ce probleme si possible avant d'utiliser des methode pas propres pour le contourner.

Reply

Marsh Posté le 27-01-2001 à 13:12:26    

Comme je le disais g pas la main sur la fonction, c une API windows , càd que je ne puex pas modifier son code ..
le pb est lors de tranfert FTP (elle s'en charge) elle ne retourne pas un code d'erreur si le serveur coupe la connexion ...donc le prgoramme continu de tourner et je n'ai plus la main dessus (après faut faire un kill :( :( )

 

Reply

Marsh Posté le 27-01-2001 à 13:47:47    

C'est quoi le nom de cette api? t'attaque la dll directement en faisant un LoadLibrary????

Reply

Marsh Posté le 27-01-2001 à 15:46:58    

Si la fonction de l'api wininet que tu utilises n'a pas de timeout, tu peux en créer un en utilisant un timer. Les fonctions settimer et killtimer de l'api win32 permettent cela. Une fois le timer arrivé à expiration, la fonction callback définie est appelée par Windows.ss
 
Cependant il est surprenant qu'une méthode d'une api windows se comporte aussi mal en ne rendant pas la main... es tu sur de bien l'appeler ?

Reply

Marsh Posté le 28-01-2001 à 13:27:40    

Oui oui je l'appelle correctement !!
je sais c fou ! Mais MS l'a coucu comme ca, c un pb connu, mais je n'ai pas trouvé encore la soluce :(
 
phlb : non non je ne fais pas de load librairy, je déclare mes fonctions commes des API Win32 sauf que la librairie utilisé eest Wininet.dll au lieu de Kernel32 ou de win32 koi
 
Guru : ok jvais regarder de ce coté là, ca semble pas mal (amsi je verrais ca demain au boulot ;))


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 29-01-2001 à 11:04:52    

je vais devenir dingue !!
 
bon j'ai implémenté un SetTimer et un KillTimer dans ma fonction d'appel de l'API FtpPutFile, ca donne à peu près ca ( g allégé au max) :
 
    lngTimerID = SetTimer(0, 0, 2000, AddressOf TimerProc)
 
' dépot du fichier à l'endroit et le nom convenu
    bRet = FtpPutFile(mlConnection, LocalFileAndPath, ServerFileAndPath, _
        TransferType, 0)
       lngTimerID = KillTimer(0, lngTimerID)
 
Ca ne marche pas !! le SetTimer est courtcircuité par le FtpPutFile, tant que le ftpputfile n'a pas fini, le timer ne tourne pas !!!!!! :gun:  c incroyable !
 
Quelqu'un peut il encore m'aider??
 jsuis dans une impasse grave, je n'ai pas les compétences (et surtout le temps) pour descendre dans les couches plus basses (avec WinSock)
 :cry:  :cry:  

 

--Message édité par Styx0--


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 29-01-2001 à 11:04:52   

Reply

Marsh Posté le 29-01-2001 à 11:16:49    

Et en creant une thread que tu detruit qund le timeout est finit ?

Reply

Marsh Posté le 29-01-2001 à 11:27:04    

Benb: c ce queje suis en train d'implémenter, le pb c que ca me fait change totalement la philosophie de ma classe ..mais je ne vois que ca à faire, mes premiers tests dans quelques minutes...


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 29-01-2001 à 14:05:02    

je crois que tu vas devoir te mettre la programmation socket et lire quelques RFC sur le protocole FTP. tu as juste la partie client à développer.
 
Dis tu utilise la classe CInternetSessionss
 
regarde:
CInternetSession::OnStatusCallback
 
La tu dois pouvoir gérer ta connection en assynchrone.
 
Les exceptions tu les catch aussi.

Reply

Marsh Posté le 29-01-2001 à 14:21:12    

Pour ce qui est du threading, jsuis en plein dedans, j'arrive pas à tuer le thread (avec TerminateThread) contenant l'API qui boucle , je creuse tjs... :(
 
phlb : Le pb c que g pas le temps de faire de la prog Socket, j'étais sensé n'y passer que quelques jours sur ce Client FTP. SInon j'utilise pas la classe CInternetSession ...je développe en VB :D
mais jsuis tout ouï à une autre soluce (l'impératif c le VB )


---------------
Galerie Photo (Canon)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed