Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semble
t il !
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroits, et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Pourquoi ne pas faire un thread / client ?
1°/ Ce programme est un projet d'études... et cette clause est
précisée dans le sujet !
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, avec
un ralentissement considérable du serveur...
GetFileAttributesEx : merci pour la fonction, je ne l'avais pas
trouvée :( (je m'étais borné à l'utilisation du tellg...)
Finalement, concernant les prototypes de fonctions, les mans & co,
auriez vous un site que vous considéreriez de "bien" ? (càd, mieux que
la msdn qui semble avoir quelques lacunes....)
Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semble
t il !
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroits, et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Pourquoi ne pas faire un thread / client ?
1°/ Ce programme est un projet d'études... et cette clause est
précisée dans le sujet !
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, avec
un ralentissement considérable du serveur...
GetFileAttributesEx : merci pour la fonction, je ne l'avais pas
trouvée :( (je m'étais borné à l'utilisation du tellg...)
Finalement, concernant les prototypes de fonctions, les mans & co,
auriez vous un site que vous considéreriez de "bien" ? (càd, mieux que
la msdn qui semble avoir quelques lacunes....)
Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semble
t il !
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroits, et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Pourquoi ne pas faire un thread / client ?
1°/ Ce programme est un projet d'études... et cette clause est
précisée dans le sujet !
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, avec
un ralentissement considérable du serveur...
GetFileAttributesEx : merci pour la fonction, je ne l'avais pas
trouvée :( (je m'étais borné à l'utilisation du tellg...)
Finalement, concernant les prototypes de fonctions, les mans & co,
auriez vous un site que vous considéreriez de "bien" ? (càd, mieux que
la msdn qui semble avoir quelques lacunes....)
On Apr 2, 6:42 pm, "NaeiKinDus" wrote:Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semb le
t il !
Je ne sais pas. « Corresponding », en anglais, c'est assez
vague. Ça peut signifie que c'est un typedef, comme ça peut
signifie que c'est un type qui a les même valeurs. Si c'était
réelement un long, je me serais attendu à « is a long »,
carrément.
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroits , et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Ou à éliminer carrément. Le flux lui-même garde bien sa postion.
Dans la mesure où tu le lis séquentiellement, il n'y a pas
besoin que tu gères la position. Tu fais un source.read( buf,
4096 ), et le coup suivant, il va lire les 4096 octets suivants.
Et ainsi jusqu'à la fin. Tu n'as même pas besoin de savoir la
taille d'avance. (Sauf que tu dois la mettre dans l'en-tête,
évidemment. Mais si tout le fichier tient en mémoire, je
réserverais simplement la place pour mettre la taille, et je le
mettrait par la suite, une fois la lecture finie.)
Et puisque tu te sers de istream::read, je te previens tout de
suite d'un petit piège. Quand tu fais source.read(), le flux se
met en état d'erreur s'il n'a pas pû lire tous les octets que tu
lui a démandés. Si donc tu lis par bloc de 4096, et le fichier
n'a pas une taille multiple de 4096, tu auras une erreur sur la
dernière lecture, alors qu'il y a bien des octets lus qu'il faut
que tu prennes en compte. Après l'erreur, il faut que tu
appelles aussi source.gcount(), fonction membre de istream, qui
t'indique le nombre d'octets réelement lus dans le dernier read.
Sinon (mais je ne suis pas sûr que tu dois t'en servir dans le
cadre d'un projet d'étude) : moi, je me servirais directement
du filebuf, sans passer par le ifstream. filebuf a une fonction,
sgetn, qui renvoie le nombre d'octets lus -- tu lis jusqu'à ce
qu'elle renvoie 0.
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, a vec
un ralentissement considérable du serveur...
Ça dépend. C'est vrai que créer un thread n'est pas toujours bon
marché. Mais si c'est un problème de performance (ce qui est en
fait souvent le cas dans les serveurs HTML, parce que
typiquement, il y a une connection par URL), on peut toujours se
servir d'un pool de threads ; quand un thread finit avec une
connection, il ne se termine pas, mais se remet dans le pool
pour reservir.
Pour les fonctions standard, je conseille :http://www.dinkumware.com/manu als/?manual=compleat&page=index.html.
Mais c'est une référence aussi, non un texte d'apprentissage.
On Apr 2, 6:42 pm, "NaeiKinDus" <naeikin...@gmail.com> wrote:
Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semb le
t il !
Je ne sais pas. « Corresponding », en anglais, c'est assez
vague. Ça peut signifie que c'est un typedef, comme ça peut
signifie que c'est un type qui a les même valeurs. Si c'était
réelement un long, je me serais attendu à « is a long »,
carrément.
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroits , et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Ou à éliminer carrément. Le flux lui-même garde bien sa postion.
Dans la mesure où tu le lis séquentiellement, il n'y a pas
besoin que tu gères la position. Tu fais un source.read( buf,
4096 ), et le coup suivant, il va lire les 4096 octets suivants.
Et ainsi jusqu'à la fin. Tu n'as même pas besoin de savoir la
taille d'avance. (Sauf que tu dois la mettre dans l'en-tête,
évidemment. Mais si tout le fichier tient en mémoire, je
réserverais simplement la place pour mettre la taille, et je le
mettrait par la suite, une fois la lecture finie.)
Et puisque tu te sers de istream::read, je te previens tout de
suite d'un petit piège. Quand tu fais source.read(), le flux se
met en état d'erreur s'il n'a pas pû lire tous les octets que tu
lui a démandés. Si donc tu lis par bloc de 4096, et le fichier
n'a pas une taille multiple de 4096, tu auras une erreur sur la
dernière lecture, alors qu'il y a bien des octets lus qu'il faut
que tu prennes en compte. Après l'erreur, il faut que tu
appelles aussi source.gcount(), fonction membre de istream, qui
t'indique le nombre d'octets réelement lus dans le dernier read.
Sinon (mais je ne suis pas sûr que tu dois t'en servir dans le
cadre d'un projet d'étude) : moi, je me servirais directement
du filebuf, sans passer par le ifstream. filebuf a une fonction,
sgetn, qui renvoie le nombre d'octets lus -- tu lis jusqu'à ce
qu'elle renvoie 0.
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, a vec
un ralentissement considérable du serveur...
Ça dépend. C'est vrai que créer un thread n'est pas toujours bon
marché. Mais si c'est un problème de performance (ce qui est en
fait souvent le cas dans les serveurs HTML, parce que
typiquement, il y a une connection par URL), on peut toujours se
servir d'un pool de threads ; quand un thread finit avec une
connection, il ne se termine pas, mais se remet dans le pool
pour reservir.
Pour les fonctions standard, je conseille :http://www.dinkumware.com/manu als/?manual=compleat&page=index.html.
Mais c'est une référence aussi, non un texte d'apprentissage.
On Apr 2, 6:42 pm, "NaeiKinDus" wrote:Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semb le
t il !
Je ne sais pas. « Corresponding », en anglais, c'est assez
vague. Ça peut signifie que c'est un typedef, comme ça peut
signifie que c'est un type qui a les même valeurs. Si c'était
réelement un long, je me serais attendu à « is a long »,
carrément.
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroits , et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Ou à éliminer carrément. Le flux lui-même garde bien sa postion.
Dans la mesure où tu le lis séquentiellement, il n'y a pas
besoin que tu gères la position. Tu fais un source.read( buf,
4096 ), et le coup suivant, il va lire les 4096 octets suivants.
Et ainsi jusqu'à la fin. Tu n'as même pas besoin de savoir la
taille d'avance. (Sauf que tu dois la mettre dans l'en-tête,
évidemment. Mais si tout le fichier tient en mémoire, je
réserverais simplement la place pour mettre la taille, et je le
mettrait par la suite, une fois la lecture finie.)
Et puisque tu te sers de istream::read, je te previens tout de
suite d'un petit piège. Quand tu fais source.read(), le flux se
met en état d'erreur s'il n'a pas pû lire tous les octets que tu
lui a démandés. Si donc tu lis par bloc de 4096, et le fichier
n'a pas une taille multiple de 4096, tu auras une erreur sur la
dernière lecture, alors qu'il y a bien des octets lus qu'il faut
que tu prennes en compte. Après l'erreur, il faut que tu
appelles aussi source.gcount(), fonction membre de istream, qui
t'indique le nombre d'octets réelement lus dans le dernier read.
Sinon (mais je ne suis pas sûr que tu dois t'en servir dans le
cadre d'un projet d'étude) : moi, je me servirais directement
du filebuf, sans passer par le ifstream. filebuf a une fonction,
sgetn, qui renvoie le nombre d'octets lus -- tu lis jusqu'à ce
qu'elle renvoie 0.
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, a vec
un ralentissement considérable du serveur...
Ça dépend. C'est vrai que créer un thread n'est pas toujours bon
marché. Mais si c'est un problème de performance (ce qui est en
fait souvent le cas dans les serveurs HTML, parce que
typiquement, il y a une connection par URL), on peut toujours se
servir d'un pool de threads ; quand un thread finit avec une
connection, il ne se termine pas, mais se remet dans le pool
pour reservir.
Pour les fonctions standard, je conseille :http://www.dinkumware.com/manu als/?manual=compleat&page=index.html.
Mais c'est une référence aussi, non un texte d'apprentissage.
Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semble t
il !
Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semble t
il !
Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord semble t
il !
Ca m'étonne quand même fort de trouver ca... est-ce que tu ne regarde rais
pas dans la doc d'une vieille version (VC 6.0 au hasard :-))
Ca m'étonne quand même fort de trouver ca... est-ce que tu ne regarde rais
pas dans la doc d'une vieille version (VC 6.0 au hasard :-))
Ca m'étonne quand même fort de trouver ca... est-ce que tu ne regarde rais
pas dans la doc d'une vieille version (VC 6.0 au hasard :-))
Ca m'étonne quand même fort de trouver ca... est-ce que tu ne regarderais
pas dans la doc d'une vieille version (VC 6.0 au hasard :-))
Non non :)
Je l'ai copier/coller directement depuis la msdn !
lien :: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang98/html/_iostream_istream.3a3a.tellg.asp
Ca m'étonne quand même fort de trouver ca... est-ce que tu ne regarderais
pas dans la doc d'une vieille version (VC 6.0 au hasard :-))
Non non :)
Je l'ai copier/coller directement depuis la msdn !
lien :: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang98/html/_iostream_istream.3a3a.tellg.asp
Ca m'étonne quand même fort de trouver ca... est-ce que tu ne regarderais
pas dans la doc d'une vieille version (VC 6.0 au hasard :-))
Non non :)
Je l'ai copier/coller directement depuis la msdn !
lien :: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang98/html/_iostream_istream.3a3a.tellg.asp
C'est vraiment mal fait leur truc :(
C'est vraiment mal fait leur truc :(
C'est vraiment mal fait leur truc :(
C'est vraiment mal fait leur truc :(
non, c'est exprès et même utile! à moins que tu préfères un mod e pensée
unique où toutes références relatives à une version n-1 d'un soft
disparaisse le jour de la parution de la version n !...
C'est vraiment mal fait leur truc :(
non, c'est exprès et même utile! à moins que tu préfères un mod e pensée
unique où toutes références relatives à une version n-1 d'un soft
disparaisse le jour de la parution de la version n !...
C'est vraiment mal fait leur truc :(
non, c'est exprès et même utile! à moins que tu préfères un mod e pensée
unique où toutes références relatives à une version n-1 d'un soft
disparaisse le jour de la parution de la version n !...
On 2 avr, 20:39, "James Kanze" wrote:On Apr 2, 6:42 pm, "NaeiKinDus" wrote:Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord se mble
t il !
Je ne sais pas. « Corresponding », en anglais, c'est assez
vague. Ça peut signifie que c'est un typedef, comme ça peut
signifie que c'est un type qui a les même valeurs. Si c'était
réelement un long, je me serais attendu à « is a long »,
carrément.
Effectivement... mais la confusion était possible :)
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroi ts, et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Ou à éliminer carrément. Le flux lui-même garde bien sa postion.
Dans la mesure où tu le lis séquentiellement, il n'y a pas
besoin que tu gères la position. Tu fais un source.read( buf,
4096 ), et le coup suivant, il va lire les 4096 octets suivants.
Et ainsi jusqu'à la fin. Tu n'as même pas besoin de savoir la
taille d'avance. (Sauf que tu dois la mettre dans l'en-tête,
évidemment. Mais si tout le fichier tient en mémoire, je
réserverais simplement la place pour mettre la taille, et je le
mettrait par la suite, une fois la lecture finie.)
Le flux garde la position même en cas de sortie de la fonction,
rebouclage, entrée dans la fonction et ouverture d'un autre fichier ?
Je penserais plus que l'objet est perdu en mémoire...
Enfin, non, le fichier ne doit absolument pas tenir en mémoire : si le
serveur propose, par exemple, de downloader un OS complet de 2Go... Je
doute que le serveur accepte de loader ça en mémoire !
Et puisque tu te sers de istream::read, je te previens tout de
suite d'un petit piège. Quand tu fais source.read(), le flux se
met en état d'erreur s'il n'a pas pû lire tous les octets que tu
lui a démandés. Si donc tu lis par bloc de 4096, et le fichier
n'a pas une taille multiple de 4096, tu auras une erreur sur la
dernière lecture, alors qu'il y a bien des octets lus qu'il faut
que tu prennes en compte. Après l'erreur, il faut que tu
appelles aussi source.gcount(), fonction membre de istream, qui
t'indique le nombre d'octets réelement lus dans le dernier read.
Merci beaucoup ! J'avais effectivement été confronté à ce soucis et il
me semblait insolvable.
Sinon (mais je ne suis pas sûr que tu dois t'en servir dans le
cadre d'un projet d'étude) : moi, je me servirais directement
du filebuf, sans passer par le ifstream. filebuf a une fonction,
sgetn, qui renvoie le nombre d'octets lus -- tu lis jusqu'à ce
qu'elle renvoie 0.
Je pourrais le faire, effectivement... Mais y a t'il une réelle
différence ? Le sgetn ne serait il pas comme un read simplement coupl é
avec un gcount ?
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, avec
un ralentissement considérable du serveur...
Ça dépend. C'est vrai que créer un thread n'est pas toujours bon
marché. Mais si c'est un problème de performance (ce qui est en
fait souvent le cas dans les serveurs HTML, parce que
typiquement, il y a une connection par URL), on peut toujours se
servir d'un pool de threads ; quand un thread finit avec une
connection, il ne se termine pas, mais se remet dans le pool
pour reservir.
J'avais pensé à mettre en pratique la solution des IOCP mais... nous
n'avons que peu de temps pour boucler le projet, aussi je ne me
sentais pas assez fort pour me lancer là dedans...
Pour les fonctions standard, je conseille :http://www.dinkumware.com/ma nuals/?manual=compleat&page=index.html.
Mais c'est une référence aussi, non un texte d'apprentissage.
J'ai la connaissance acquise du C, mais nullement l'approche objet
induite par C++... Et ne sachant pas vraiment non plus les ajouts /
modifications entre C et C++ (ou même la programmation sous
Windows...)
On 2 avr, 20:39, "James Kanze" <james.ka...@gmail.com> wrote:
On Apr 2, 6:42 pm, "NaeiKinDus" <naeikin...@gmail.com> wrote:
Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord se mble
t il !
Je ne sais pas. « Corresponding », en anglais, c'est assez
vague. Ça peut signifie que c'est un typedef, comme ça peut
signifie que c'est un type qui a les même valeurs. Si c'était
réelement un long, je me serais attendu à « is a long »,
carrément.
Effectivement... mais la confusion était possible :)
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroi ts, et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Ou à éliminer carrément. Le flux lui-même garde bien sa postion.
Dans la mesure où tu le lis séquentiellement, il n'y a pas
besoin que tu gères la position. Tu fais un source.read( buf,
4096 ), et le coup suivant, il va lire les 4096 octets suivants.
Et ainsi jusqu'à la fin. Tu n'as même pas besoin de savoir la
taille d'avance. (Sauf que tu dois la mettre dans l'en-tête,
évidemment. Mais si tout le fichier tient en mémoire, je
réserverais simplement la place pour mettre la taille, et je le
mettrait par la suite, une fois la lecture finie.)
Le flux garde la position même en cas de sortie de la fonction,
rebouclage, entrée dans la fonction et ouverture d'un autre fichier ?
Je penserais plus que l'objet est perdu en mémoire...
Enfin, non, le fichier ne doit absolument pas tenir en mémoire : si le
serveur propose, par exemple, de downloader un OS complet de 2Go... Je
doute que le serveur accepte de loader ça en mémoire !
Et puisque tu te sers de istream::read, je te previens tout de
suite d'un petit piège. Quand tu fais source.read(), le flux se
met en état d'erreur s'il n'a pas pû lire tous les octets que tu
lui a démandés. Si donc tu lis par bloc de 4096, et le fichier
n'a pas une taille multiple de 4096, tu auras une erreur sur la
dernière lecture, alors qu'il y a bien des octets lus qu'il faut
que tu prennes en compte. Après l'erreur, il faut que tu
appelles aussi source.gcount(), fonction membre de istream, qui
t'indique le nombre d'octets réelement lus dans le dernier read.
Merci beaucoup ! J'avais effectivement été confronté à ce soucis et il
me semblait insolvable.
Sinon (mais je ne suis pas sûr que tu dois t'en servir dans le
cadre d'un projet d'étude) : moi, je me servirais directement
du filebuf, sans passer par le ifstream. filebuf a une fonction,
sgetn, qui renvoie le nombre d'octets lus -- tu lis jusqu'à ce
qu'elle renvoie 0.
Je pourrais le faire, effectivement... Mais y a t'il une réelle
différence ? Le sgetn ne serait il pas comme un read simplement coupl é
avec un gcount ?
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, avec
un ralentissement considérable du serveur...
Ça dépend. C'est vrai que créer un thread n'est pas toujours bon
marché. Mais si c'est un problème de performance (ce qui est en
fait souvent le cas dans les serveurs HTML, parce que
typiquement, il y a une connection par URL), on peut toujours se
servir d'un pool de threads ; quand un thread finit avec une
connection, il ne se termine pas, mais se remet dans le pool
pour reservir.
J'avais pensé à mettre en pratique la solution des IOCP mais... nous
n'avons que peu de temps pour boucler le projet, aussi je ne me
sentais pas assez fort pour me lancer là dedans...
Pour les fonctions standard, je conseille :http://www.dinkumware.com/ma nuals/?manual=compleat&page=index.html.
Mais c'est une référence aussi, non un texte d'apprentissage.
J'ai la connaissance acquise du C, mais nullement l'approche objet
induite par C++... Et ne sachant pas vraiment non plus les ajouts /
modifications entre C et C++ (ou même la programmation sous
Windows...)
On 2 avr, 20:39, "James Kanze" wrote:On Apr 2, 6:42 pm, "NaeiKinDus" wrote:Très bien, veuillez m'excuser pour la confusion des genres, mais un
"corresponding to a long" veut dire que type == long... A tord se mble
t il !
Je ne sais pas. « Corresponding », en anglais, c'est assez
vague. Ça peut signifie que c'est un typedef, comme ça peut
signifie que c'est un type qui a les même valeurs. Si c'était
réelement un long, je me serais attendu à « is a long »,
carrément.
Effectivement... mais la confusion était possible :)
Je m'en vais corriger ça de suite.
Pour le petit programme isolant le soucis, j'en serais bien en peine
de réaliser ça car le soucis peut se trouver à pas mal d'endroi ts, et
prendree en compte les threads, les sockets, etc... dur.
Idx : long qui contient la position dans la lecture de fichier... A
changer donc par un streampos.
Ou à éliminer carrément. Le flux lui-même garde bien sa postion.
Dans la mesure où tu le lis séquentiellement, il n'y a pas
besoin que tu gères la position. Tu fais un source.read( buf,
4096 ), et le coup suivant, il va lire les 4096 octets suivants.
Et ainsi jusqu'à la fin. Tu n'as même pas besoin de savoir la
taille d'avance. (Sauf que tu dois la mettre dans l'en-tête,
évidemment. Mais si tout le fichier tient en mémoire, je
réserverais simplement la place pour mettre la taille, et je le
mettrait par la suite, une fois la lecture finie.)
Le flux garde la position même en cas de sortie de la fonction,
rebouclage, entrée dans la fonction et ouverture d'un autre fichier ?
Je penserais plus que l'objet est perdu en mémoire...
Enfin, non, le fichier ne doit absolument pas tenir en mémoire : si le
serveur propose, par exemple, de downloader un OS complet de 2Go... Je
doute que le serveur accepte de loader ça en mémoire !
Et puisque tu te sers de istream::read, je te previens tout de
suite d'un petit piège. Quand tu fais source.read(), le flux se
met en état d'erreur s'il n'a pas pû lire tous les octets que tu
lui a démandés. Si donc tu lis par bloc de 4096, et le fichier
n'a pas une taille multiple de 4096, tu auras une erreur sur la
dernière lecture, alors qu'il y a bien des octets lus qu'il faut
que tu prennes en compte. Après l'erreur, il faut que tu
appelles aussi source.gcount(), fonction membre de istream, qui
t'indique le nombre d'octets réelement lus dans le dernier read.
Merci beaucoup ! J'avais effectivement été confronté à ce soucis et il
me semblait insolvable.
Sinon (mais je ne suis pas sûr que tu dois t'en servir dans le
cadre d'un projet d'étude) : moi, je me servirais directement
du filebuf, sans passer par le ifstream. filebuf a une fonction,
sgetn, qui renvoie le nombre d'octets lus -- tu lis jusqu'à ce
qu'elle renvoie 0.
Je pourrais le faire, effectivement... Mais y a t'il une réelle
différence ? Le sgetn ne serait il pas comme un read simplement coupl é
avec un gcount ?
2°/ Il semblerait que cela ne soit pas bon à fort taux de charge, avec
un ralentissement considérable du serveur...
Ça dépend. C'est vrai que créer un thread n'est pas toujours bon
marché. Mais si c'est un problème de performance (ce qui est en
fait souvent le cas dans les serveurs HTML, parce que
typiquement, il y a une connection par URL), on peut toujours se
servir d'un pool de threads ; quand un thread finit avec une
connection, il ne se termine pas, mais se remet dans le pool
pour reservir.
J'avais pensé à mettre en pratique la solution des IOCP mais... nous
n'avons que peu de temps pour boucler le projet, aussi je ne me
sentais pas assez fort pour me lancer là dedans...
Pour les fonctions standard, je conseille :http://www.dinkumware.com/ma nuals/?manual=compleat&page=index.html.
Mais c'est une référence aussi, non un texte d'apprentissage.
J'ai la connaissance acquise du C, mais nullement l'approche objet
induite par C++... Et ne sachant pas vraiment non plus les ajouts /
modifications entre C et C++ (ou même la programmation sous
Windows...)
NaeiKinDus wrote on 02/04/2007 22:06:C'est vraiment mal fait leur truc :(
non, c'est exprès et même utile!
NaeiKinDus wrote on 02/04/2007 22:06:
C'est vraiment mal fait leur truc :(
non, c'est exprès et même utile!
NaeiKinDus wrote on 02/04/2007 22:06:C'est vraiment mal fait leur truc :(
non, c'est exprès et même utile!