while ( bufsize ) {
s = str;
while ( *s && bufsize-- ) *b++ = *s++;
}
return buf;
}
passe lui un `tampon` de 65ko ou même 128ko/256ko/... et tu vas voir à quel vitesse il rempli le `tampon` :)
Exact, tu charge à chaque `trame`. Charge au lancement du soft et décharge à la fermeture du soft << méthode parfaite(dans la plus part des cas tel que le tient)
~(.:: NitRic ::.)~
PS: Le code plus haut n'est pas parfait, ce n'est qu'un exemple.
_sebf
Messages postés42Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention 7 octobre 2006 5 sept. 2004 à 22:23
> J'ai pas dis que `calcul_du_checksum()` était inutile/nuisible, j'ai dis que
> l'appel à `liberation_du_jeton()` était inutile et même nuisible dans
> `calcul_du_checksum()`
Tu veux dire que le temps du calcul est télément faible que ce n'est pas la peine de rendre la main ?
Quid du temps de calcul sur des datas de 65K.
> Tes boucles n'ont rien d'inquitant, aucun besoin de rendre la main à
> personne. Tu boucle et une fois terminé tu `return`
Ha oui, tu as raison :)
> Slee(0L); agit au niveau du thread appellant seulement, il agit un peu comme
> un DoEvents(vb) d'une certaine facon mais suspend l'exécution du thread un
> peu moin longtemp qu'un DoEvents(vb) et il n'est pas plus lent que ton
> `liberation_du_jeton()`, je dirais même qu'il serait plus rapide
Merci pour l'info
> Des algos(tes checksums) ca ce veut rapide et non ralentis par des `pseudos
> DoEvents` à la VB
J'ai compris. C'est vrai cas l'origine, cette fonction était là pour la boucle d'envoi de trame à l'infinie. Et j'ai débordé en en mettant partout.
> Une fois WSAStartup() appelé, la librarie est prete à être utilisé, la
> librairie est chargé dans le process appellant et comme dans ton code tu n'a
> qu'un seul et unique process, il serait préférable de charger la librairie
> qu'une seul fois, ton code serait plus `claire`, rapide, ...
Tu veux dire que je l'ouvre pour chaque trame ? Ha oui, surement. Merci pour la remarque.
> WSAStartup() charge la version qu'elle veut; Si la version que tu demande
> est disponible alors elle va la charger, sinon, elle va charger celle
> disponible sur le système.
>
> Imagine que tu demande la version 3 et que cette version n'est pas
> disponible, seul la version 2 est dispo, tes fonctions qui requier les
> nouveautés dans la version 3 vont planter, bugger, ...
Ok
> Bref, voilà .. c'était mes p'tits commentaires ...
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 5 sept. 2004 à 21:06
J'ai pas dis que `calcul_du_checksum()` était inutile/nuisible, j'ai dis que l'appel à `liberation_du_jeton()` était inutile et même nuisible dans `calcul_du_checksum()`
Tes boucles n'ont rien d'inquitant, aucun besoin de rendre la main à personne. Tu boucle et une fois terminé tu `return`
Slee(0L); agit au niveau du thread appellant seulement, il agit un peu comme un DoEvents(vb) d'une certaine facon mais suspend l'exécution du thread un peu moin longtemp qu'un DoEvents(vb) et il n'est pas plus lent que ton `liberation_du_jeton()`, je dirais même qu'il serait plus rapide
Des algos(tes checksums) ca ce veut rapide et non ralentis par des `pseudos DoEvents` à la VB
Pour la librarie Winsock, si tu dev une application cliente ou serveur ou autre qui requier les sockets(ainsi que la librairie Winsock), charge la librairie au lancement de ton application et tu la décharge une fois qu'elle n'est plus utile(à la fermeture de ton application ou autre par exemple)
Une fois WSAStartup() appelé, la librarie est prete à être utilisé, la librairie est chargé dans le process appellant et comme dans ton code tu n'a qu'un seul et unique process, il serait préférable de charger la librairie qu'une seul fois, ton code serait plus `claire`, rapide, ...
/* charge la librairie */
if ( (ret = WSAStartup(_WINSCK_VER, &wd)) ) {
printf("Erreur lors du chargement de la librairie Winsock v%u.%u: %d\n", LOBYTE(_WINSCK_VER), HIBYTE(_WINSCK_VER), ret);
return 0;
}
/* vérifie que la version demandé est bien celle chargée */
if ( LOBYTE(wd.wVersion) != LOBYTE(_WINSCK_VER) ) {
printf("La librairie Winsock v%u.%u n'est pas disponible. Version disponible: %u.%u\n", LOBYTE(_WINSCK_VER), HIBYTE(_WINSCK_VER), LOBYTE(wd.wVersion), HIBYTE(wd.wVersion));
/* ici, on pourait très bien continuer l'exécution du soft quand même, si tu demande la version 1 et que seul la version 2 est dispo alors y'a pas vraiment de problème, ce qui est présent dans la version 1 est dispo dans la version 2 également sauf à quelques exceptions près */
WSACleanup();
return 0;
}
/* ton code ... */
/* ... */
WSACleanup();
return 0;
}
WSAStartup() charge la version qu'elle veut; Si la version que tu demande est disponible alors elle va la charger, sinon, elle va charger celle disponible sur le système.
Imagine que tu demande la version 3 et que cette version n'est pas disponible, seul la version 2 est dispo, tes fonctions qui requier les nouveautés dans la version 3 vont planter, bugger, ...
Bref, voilà .. c'était mes p'tits commentaires ...
~(.:: NitRic ::.)~
_sebf
Messages postés42Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention 7 octobre 2006 5 sept. 2004 à 14:02
> Tes `tampons` de 65ko c'est BEAUCOUP trop, croit
> moi. Un simple `MAX_PATH` suffirait AMPLEMENT,
> sauf peut-être pour ta fonction
> `dimensionnement_de_data_a_envoyer()` dans
> lequel tu devrais plutôt demander un simple pointeur
Oui c'était pour ça, je pensais que ne déclarer qu'un seule variable tampon (grande afin de pourvoir être utilisée partout) était mieux que plein.
Je vais regarder ton conseil.
> Ta structure pour les adresses IP's locals, un array de
> 1000 ... c'est une blague j'espère !? 1000 adresses
> IP's ... ca fait un peu beaucoup non ?
:( bah oui, tu as raison.
> Tes `liberation_du_jeton()` sont, à 99.9% inutile, un
> simple `Sleep(0L)` suffirait amplement
Je ne comprend pas, cette fonction permet de rendre la main à l'interface graphique afin de permettre à l'utilisateur de continuer l'interaction pendant des boucles.
La fonction Sleep aurait pour effet de ralentir en bloquant l'interface, non ?
> et surtout
> dans ta fonction `calcul_du_checksum()` ou ton
> `liberation_du_jeton()` n'est pas utile du tout, au
> contraire, il est plutôt nuisible
Pourquoi dis tu que la fonction `calcul_du_checksum()` est inutile, elle est appelé par les autres fonctions de calcul du checksum des différentes entêtes.
Et pourquoi nuisible ?
> Le chargement le la librarie Winsock devrait ce faire
> au chargement du soft ou dès qu'elle est requise et
> déchargé une fois qu'elle ne l'est plus et non dans
> chaque fonction.
> Perso, je vérifie que la librarie ce soit bien chargé et
> que la version(major(LOBYTE()) principalement) que
> j'ai demandé est la bonne.
Je ne comprend pas, peux tu m'expliquer ?
> Pour l'include ... évite ce genre de path, ajoute des
> répertoires dans les options de ton IDE, même chose
> pour ta librarie.
Ok, thx
> J'opterais pour des pointeurs plutôt que des arrays
> de taille fixe.
Oui
> Ta librairie, 188ko, elle n'est surement pas compilé en
> release.
> Les 2 modes serait bien, debug & release, ta un
> header dans lequel tu link la bonne lib selon le mode
> de compilation du user(debug/release)
Oui je l'ai mis en Debug
> PS: Les critiques nous aident à mieux performer et à
> avancer dans la vie de tous les jours, ce n'est rien de
> méchant :)
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 5 sept. 2004 à 08:54
-- Critiques --
Tes `tampons` de 65ko c'est BEAUCOUP trop, croit moi. Un simple `MAX_PATH` suffirait AMPLEMENT, sauf peut-être pour ta fonction `dimensionnement_de_data_a_envoyer()` dans lequel tu devrais plutôt demander un simple pointeur
Ta structure pour les adresses IP's locals, un array de 1000 ... c'est une blague j'espère !? 1000 adresses IP's ... ca fait un peu beaucoup non ?
Tes `liberation_du_jeton()` sont, à 99.9% inutile, un simple `Sleep(0L)` suffirait amplement et surtout dans ta fonction `calcul_du_checksum()` ou ton `liberation_du_jeton()` n'est pas utile du tout, au contraire, il est plutôt nuisible
Le chargement le la librarie Winsock devrait ce faire
au chargement du soft ou dès qu'elle est requise et déchargé une fois qu'elle ne l'est plus et non dans chaque fonction.
Perso, je vérifie que la librarie ce soit bien chargé et que la version(major(LOBYTE()) principalement) que j'ai demandé est la bonne.
Pour l'include ... évite ce genre de path, ajoute des répertoires dans les options de ton IDE, même chose pour ta librarie.
J'opterais pour des pointeurs plutôt que des arrays de taille fixe.
Ta librairie, 188ko, elle n'est surement pas compilé en release.
Les 2 modes serait bien, debug & release, ta un header dans lequel tu link la bonne lib selon le mode de compilation du user(debug/release)
etc ...
etc ...
etc ...
...
Pour répondre à `tibur`: Oui, cherche simplement `socket class` avec google et tu auras tout ce que tu veux et bien plus encore ...
PS: Les critiques nous aident à mieux performer et à avancer dans la vie de tous les jours, ce n'est rien de méchant :)
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 4 sept. 2004 à 09:01
çà doit être réalisable non ? Il suffit d'un peut plus de code .
cs_tibur
Messages postés101Date d'inscriptionsamedi 9 février 2002StatutMembreDernière intervention 5 mai 2009 4 sept. 2004 à 03:56
Dommage que ca soit pas du C++.
Je cherche une lib objet qui permette d'utiliser les sockets comme des flux classiques de la std. (genre std::iostream).
Beau travail tout de même !
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 4 sept. 2004 à 00:59
dommage que ça ne soit pas super portable tout ça :(
le chemin de la lib, peu importe, c'est vite changé. c'est plus le fait d'utiliser les winsocks qui me chagrine. eeeeeenfin ^^
et puis, t'as été plutôt productif ajd lol! quasi ts les codes du jour sont de toi! quoique tu aurais souvent pu grouper (une version console et graphique, ça rentre ds un même exe sans problème quoi ^^)
5 sept. 2004 à 22:57
Tout à fait, ce n'est pas la peine de rendre la main, même quand tu rempli ton `tampon` de 65ko
l'utilisateur n'aura même pas le temp de s'en rendre compte que ca va être terminé
char * fill_buf( char * buf, size_t bufsize, char * str ) {
char * b = buf, * s;
while ( bufsize ) {
s = str;
while ( *s && bufsize-- ) *b++ = *s++;
}
return buf;
}
passe lui un `tampon` de 65ko ou même 128ko/256ko/... et tu vas voir à quel vitesse il rempli le `tampon` :)
Exact, tu charge à chaque `trame`. Charge au lancement du soft et décharge à la fermeture du soft << méthode parfaite(dans la plus part des cas tel que le tient)
~(.:: NitRic ::.)~
PS: Le code plus haut n'est pas parfait, ce n'est qu'un exemple.
5 sept. 2004 à 22:23
> l'appel à `liberation_du_jeton()` était inutile et même nuisible dans
> `calcul_du_checksum()`
Tu veux dire que le temps du calcul est télément faible que ce n'est pas la peine de rendre la main ?
Quid du temps de calcul sur des datas de 65K.
> Tes boucles n'ont rien d'inquitant, aucun besoin de rendre la main à
> personne. Tu boucle et une fois terminé tu `return`
Ha oui, tu as raison :)
> Slee(0L); agit au niveau du thread appellant seulement, il agit un peu comme
> un DoEvents(vb) d'une certaine facon mais suspend l'exécution du thread un
> peu moin longtemp qu'un DoEvents(vb) et il n'est pas plus lent que ton
> `liberation_du_jeton()`, je dirais même qu'il serait plus rapide
Merci pour l'info
> Des algos(tes checksums) ca ce veut rapide et non ralentis par des `pseudos
> DoEvents` à la VB
J'ai compris. C'est vrai cas l'origine, cette fonction était là pour la boucle d'envoi de trame à l'infinie. Et j'ai débordé en en mettant partout.
> Une fois WSAStartup() appelé, la librarie est prete à être utilisé, la
> librairie est chargé dans le process appellant et comme dans ton code tu n'a
> qu'un seul et unique process, il serait préférable de charger la librairie
> qu'une seul fois, ton code serait plus `claire`, rapide, ...
Tu veux dire que je l'ouvre pour chaque trame ? Ha oui, surement. Merci pour la remarque.
> WSAStartup() charge la version qu'elle veut; Si la version que tu demande
> est disponible alors elle va la charger, sinon, elle va charger celle
> disponible sur le système.
>
> Imagine que tu demande la version 3 et que cette version n'est pas
> disponible, seul la version 2 est dispo, tes fonctions qui requier les
> nouveautés dans la version 3 vont planter, bugger, ...
Ok
> Bref, voilà .. c'était mes p'tits commentaires ...
Come dans mon précédent post, merci c'est sympas.
_SebF
http://www.frameip.com
Un site pour les spécialistes IP
5 sept. 2004 à 21:06
Tes boucles n'ont rien d'inquitant, aucun besoin de rendre la main à personne. Tu boucle et une fois terminé tu `return`
Slee(0L); agit au niveau du thread appellant seulement, il agit un peu comme un DoEvents(vb) d'une certaine facon mais suspend l'exécution du thread un peu moin longtemp qu'un DoEvents(vb) et il n'est pas plus lent que ton `liberation_du_jeton()`, je dirais même qu'il serait plus rapide
Des algos(tes checksums) ca ce veut rapide et non ralentis par des `pseudos DoEvents` à la VB
Pour la librarie Winsock, si tu dev une application cliente ou serveur ou autre qui requier les sockets(ainsi que la librairie Winsock), charge la librairie au lancement de ton application et tu la décharge une fois qu'elle n'est plus utile(à la fermeture de ton application ou autre par exemple)
Une fois WSAStartup() appelé, la librarie est prete à être utilisé, la librairie est chargé dans le process appellant et comme dans ton code tu n'a qu'un seul et unique process, il serait préférable de charger la librairie qu'une seul fois, ton code serait plus `claire`, rapide, ...
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
/* #include ... */
#define _WINSCK_VER (MAKEWORD(2, 0))
int main(int argc, char * argv[]) {
int ret = 0;
WSADATA wd;
/* charge la librairie */
if ( (ret = WSAStartup(_WINSCK_VER, &wd)) ) {
printf("Erreur lors du chargement de la librairie Winsock v%u.%u: %d\n", LOBYTE(_WINSCK_VER), HIBYTE(_WINSCK_VER), ret);
return 0;
}
/* vérifie que la version demandé est bien celle chargée */
if ( LOBYTE(wd.wVersion) != LOBYTE(_WINSCK_VER) ) {
printf("La librairie Winsock v%u.%u n'est pas disponible. Version disponible: %u.%u\n", LOBYTE(_WINSCK_VER), HIBYTE(_WINSCK_VER), LOBYTE(wd.wVersion), HIBYTE(wd.wVersion));
/* ici, on pourait très bien continuer l'exécution du soft quand même, si tu demande la version 1 et que seul la version 2 est dispo alors y'a pas vraiment de problème, ce qui est présent dans la version 1 est dispo dans la version 2 également sauf à quelques exceptions près */
WSACleanup();
return 0;
}
/* ton code ... */
/* ... */
WSACleanup();
return 0;
}
WSAStartup() charge la version qu'elle veut; Si la version que tu demande est disponible alors elle va la charger, sinon, elle va charger celle disponible sur le système.
Imagine que tu demande la version 3 et que cette version n'est pas disponible, seul la version 2 est dispo, tes fonctions qui requier les nouveautés dans la version 3 vont planter, bugger, ...
Bref, voilà .. c'était mes p'tits commentaires ...
~(.:: NitRic ::.)~
5 sept. 2004 à 14:02
> moi. Un simple `MAX_PATH` suffirait AMPLEMENT,
> sauf peut-être pour ta fonction
> `dimensionnement_de_data_a_envoyer()` dans
> lequel tu devrais plutôt demander un simple pointeur
Oui c'était pour ça, je pensais que ne déclarer qu'un seule variable tampon (grande afin de pourvoir être utilisée partout) était mieux que plein.
Je vais regarder ton conseil.
> Ta structure pour les adresses IP's locals, un array de
> 1000 ... c'est une blague j'espère !? 1000 adresses
> IP's ... ca fait un peu beaucoup non ?
:( bah oui, tu as raison.
> Tes `liberation_du_jeton()` sont, à 99.9% inutile, un
> simple `Sleep(0L)` suffirait amplement
Je ne comprend pas, cette fonction permet de rendre la main à l'interface graphique afin de permettre à l'utilisateur de continuer l'interaction pendant des boucles.
La fonction Sleep aurait pour effet de ralentir en bloquant l'interface, non ?
> et surtout
> dans ta fonction `calcul_du_checksum()` ou ton
> `liberation_du_jeton()` n'est pas utile du tout, au
> contraire, il est plutôt nuisible
Pourquoi dis tu que la fonction `calcul_du_checksum()` est inutile, elle est appelé par les autres fonctions de calcul du checksum des différentes entêtes.
Et pourquoi nuisible ?
> Le chargement le la librarie Winsock devrait ce faire
> au chargement du soft ou dès qu'elle est requise et
> déchargé une fois qu'elle ne l'est plus et non dans
> chaque fonction.
> Perso, je vérifie que la librarie ce soit bien chargé et
> que la version(major(LOBYTE()) principalement) que
> j'ai demandé est la bonne.
Je ne comprend pas, peux tu m'expliquer ?
> Pour l'include ... évite ce genre de path, ajoute des
> répertoires dans les options de ton IDE, même chose
> pour ta librarie.
Ok, thx
> J'opterais pour des pointeurs plutôt que des arrays
> de taille fixe.
Oui
> Ta librairie, 188ko, elle n'est surement pas compilé en
> release.
> Les 2 modes serait bien, debug & release, ta un
> header dans lequel tu link la bonne lib selon le mode
> de compilation du user(debug/release)
Oui je l'ai mis en Debug
> PS: Les critiques nous aident à mieux performer et à
> avancer dans la vie de tous les jours, ce n'est rien de
> méchant :)
Oui au contraire, merci.
_SebF
http://www.frameip.com
Un site pour les spécialistes IP
5 sept. 2004 à 08:54
Tes `tampons` de 65ko c'est BEAUCOUP trop, croit moi. Un simple `MAX_PATH` suffirait AMPLEMENT, sauf peut-être pour ta fonction `dimensionnement_de_data_a_envoyer()` dans lequel tu devrais plutôt demander un simple pointeur
Ta structure pour les adresses IP's locals, un array de 1000 ... c'est une blague j'espère !? 1000 adresses IP's ... ca fait un peu beaucoup non ?
Tes `liberation_du_jeton()` sont, à 99.9% inutile, un simple `Sleep(0L)` suffirait amplement et surtout dans ta fonction `calcul_du_checksum()` ou ton `liberation_du_jeton()` n'est pas utile du tout, au contraire, il est plutôt nuisible
Le chargement le la librarie Winsock devrait ce faire
au chargement du soft ou dès qu'elle est requise et déchargé une fois qu'elle ne l'est plus et non dans chaque fonction.
Perso, je vérifie que la librarie ce soit bien chargé et que la version(major(LOBYTE()) principalement) que j'ai demandé est la bonne.
Pour l'include ... évite ce genre de path, ajoute des répertoires dans les options de ton IDE, même chose pour ta librarie.
J'opterais pour des pointeurs plutôt que des arrays de taille fixe.
Ta librairie, 188ko, elle n'est surement pas compilé en release.
Les 2 modes serait bien, debug & release, ta un header dans lequel tu link la bonne lib selon le mode de compilation du user(debug/release)
etc ...
etc ...
etc ...
...
Pour répondre à `tibur`: Oui, cherche simplement `socket class` avec google et tu auras tout ce que tu veux et bien plus encore ...
PS: Les critiques nous aident à mieux performer et à avancer dans la vie de tous les jours, ce n'est rien de méchant :)
4 sept. 2004 à 09:01
4 sept. 2004 à 03:56
Je cherche une lib objet qui permette d'utiliser les sockets comme des flux classiques de la std. (genre std::iostream).
Beau travail tout de même !
4 sept. 2004 à 00:59
#pragma comment(lib,"C:\\RepPerso\\Personnel\\Developpement\\Projets\\LibrairieSocket\\LibrairieSocket.lib")
dommage que ça ne soit pas super portable tout ça :(
le chemin de la lib, peu importe, c'est vite changé. c'est plus le fait d'utiliser les winsocks qui me chagrine. eeeeeenfin ^^
et puis, t'as été plutôt productif ajd lol! quasi ts les codes du jour sont de toi! quoique tu aurais souvent pu grouper (une version console et graphique, ça rentre ds un même exe sans problème quoi ^^)