API - Est il possible de définir un temps d'execution d'une fonction - Programmation
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 ....
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.
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***
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.
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 )
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????
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 ?
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 )
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 !!!!!! 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)
--Message édité par Styx0--
Marsh Posté le 29-01-2001 à 11:16:49
Et en creant une thread que tu detruit qund le timeout est finit ?
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...
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.
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
mais jsuis tout ouï à une autre soluce (l'impératif c le VB )
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