Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#452 Le 29/09/2011, à 19:38

grim7reaper

Re : /* Topic des codeurs [6] */

Rolinh a écrit :

@grim: c'est juste que j'ai implémenté un thread pour la copie de manière complètement barbare juste pour voir si ça fonctionnait mais ça ne me libérait pas la GUI quand même.

C’est normal que la GUI ne reprenne pas la main : à la fin de on_apply_clicked tu fais un pthread_join donc tu attends la fin du thread (donc on_apply_clicked ne se termine pas tant que ton thread n’est pas fini => c’est comme si t’avais rien fait).

Je ne connais pas tes besoins, mais peut-être que pthread_detach (au lieu de pthread_join) serait plus adapté à ton cas ?

Dernière modification par grim7reaper (Le 29/09/2011, à 19:40)

Hors ligne

#453 Le 29/09/2011, à 20:14

The Uploader

Re : /* Topic des codeurs [6] */

tshirtman a écrit :

tout ça pour un fizzbuzz oO

Un premier kata de TDD/Agile utilisant FizzBuzz.
1317323640.jpg

Le FizzBuzz en lui même ne fait que 11 lignes:

class FizzBuzzer
    def fizzbuzz
        hfb = {}
        for i in Range.new(1, 100)
            result = i/3 != 0 ? "Fizz" : ""
            result = i/5 != 0 ? result + "Buzz" : result
            hfb.merge! i => result
        end
        return hfb
    end
end

@Rolinh : C'est bien en C ton copieur ? Tu peux regarder du côté du dialogue d'état des opérations sur les fichiers de Thunar pour "asynchroniser" les opérations et la GUI via des threads, si j'ai bien suivi les récents mails sur la ml xfce. smile

Dernière modification par The Uploader (Le 29/09/2011, à 20:18)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#454 Le 29/09/2011, à 20:42

Rolinh

Re : /* Topic des codeurs [6] */

@grim: merci pour le pthread_detach. Ça à l'air de fonctionner. Il s'agit de proprer ça maintenant.
En revanche, j'ai toujours des soucis avec la progress bar. Pas moyen de la faire fonctionner! sad

Hors ligne

#455 Le 29/09/2011, à 21:22

xapantu

Re : /* Topic des codeurs [6] */

Regarde du côté des fonctions idle pour changer la valeur de ta progressbar à chaque itération de la main loop de gtk... (j'ai pas d'exemple en tête, en Vala, faut juste faire Idle.add( () => { code });, c'est un peu plus compliquer en C, du genre g_idle_add)

Hors ligne

#456 Le 29/09/2011, à 21:59

The Uploader

Re : /* Topic des codeurs [6] */

version proprée :

#! /usr/bin/env ruby
require "test/unit"

#    Exercice FizzBuzz :
#    - si x/3 != 0 : Fizz
#    - si x/5 != 0 : Buzz
#    - si les deux : FizzBuzz
#    - si aucun : rien
# Et ce jusqu'à 100

class FizzBuzzer
    def fizzbuzz
        hfb = {}
        for i in Range.new(1, 100)
            result = i/3 != 0 ? "Fizz" : ""
            result = i/5 != 0 ? result + "Buzz" : result
            hfb.merge! i => result
        end
        return hfb
    end
end

class TestMyObject < Test::Unit::TestCase

    def initialize(arg)
        initialize_fizzbuzzer
        super
    end

    def initialize_fizzbuzzer
        @myfizzbuzobj = FizzBuzzer.new
    end

    def test_gives_a_hash_of_one_hundred_pairs
        assert_not_nil @myfizzbuzobj.fizzbuzz
        assert_equal Hash, @myfizzbuzobj.fizzbuzz.class
        assert_equal 100, @myfizzbuzobj.fizzbuzz.size
    end

    def test_is_fizzbuzz
        hfb = @myfizzbuzobj.fizzbuzz
        for i in Range.new(1, 100)
            assert_not_nil hfb[i]
            assert_equal "Fizz", hfb[i] if i/3 != 0 and i/5 == 0
            assert_equal "Buzz", hfb[i] if i/3 == 0 and i/5 != 0
            assert_equal "FizzBuzz", hfb[i] if i/3 != 0 and i/5 != 0
            assert_equal "", hfb[i] if i/3 == 0 and i/5 == 0
        end
    end
end

- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#457 Le 29/09/2011, à 22:41

Rolinh

Re : /* Topic des codeurs [6] */

@grim: ça à l'air de fonctionner comme on le voulait maintenant. On a tâcher de faire ça propre mais si tu vois un oubli n'hésite pas hein wink

@xapantu: merci. Je regarderais de ce côté.

Dernière modification par Rolinh (Le 29/09/2011, à 22:42)

Hors ligne

#458 Le 29/09/2011, à 22:43

grim7reaper

Re : /* Topic des codeurs [6] */

De rien wink
J’essaye de rejeter un œil dès que possible.

Sinon c’est quoi le souci avec la progress bar ? La mise à jour ?

Dernière modification par grim7reaper (Le 29/09/2011, à 22:44)

Hors ligne

#459 Le 29/09/2011, à 22:46

Rolinh

Re : /* Topic des codeurs [6] */

smile
Ouais. En fait, elle ne s'update pas et à la fin de la copie elle se complète d'un seul coup. hmm

Hors ligne

#460 Le 29/09/2011, à 22:50

grim7reaper

Re : /* Topic des codeurs [6] */

Tu fais l’update où et comment ?

Édit : c’est bon j’ai vu.

Sinon, tu as mis 100 secondes pour g_timeout_add_seconds (ça me paraît un peu long), c’est normal ?

Dernière modification par grim7reaper (Le 29/09/2011, à 23:22)

Hors ligne

#461 Le 30/09/2011, à 08:12

The Uploader

Re : /* Topic des codeurs [6] */

tshirtman a écrit :

tout ça pour un fizzbuzz oO

Tout ça pour un fichu FizzBuzz en Java avec TDD fait avec IntelliJ! yikes

Vive Ruby + Vim. tongue

Dernière modification par The Uploader (Le 30/09/2011, à 08:13)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#462 Le 30/09/2011, à 08:40

Rolinh

Re : /* Topic des codeurs [6] */

Désolé, j'étais parti me coucher.
Alors pour le coup des 100 secondes c'est juste que... c'était une erreur ^^ En fait, on utilisait une autre fonction avant et il me semble qu'elle prenait des millisecondes.
Du coup j'ai corrigé mais le problème ne vient pas de là.

En fait, il y a un problème avec le calcul de la taille. La taille de la queue passe subitement de la taille originale à 0 (remarqué cela en printant la valeur de l'élément depuis dequeue de queue.c). D'ailleurs, un des problèmes vient du fait que l'on enlève de la taille de la queue la taille de l'élément courant au moment où on le dequeue. C'est une erreur particulièrement flagrante sur les gros fichiers qui prennent du temps à se copier. Faudrait faire quoi? Stater le fichier de destination? Faire un thread avec une fonction qui va voir dans la destination ce qui a effectivement été copié? Si tu as une bonne suggestion, je suis preneur.
Je crois que je vais aller fouiner dans le code de scp pour voir comment ils gèrent ça.

EDIT: j'suis trop bête... J'ai trouvé un moyen tout propre de faire ça smile (détails plus tard)

Dernière modification par Rolinh (Le 30/09/2011, à 08:57)

Hors ligne

#463 Le 30/09/2011, à 09:14

grim7reaper

Re : /* Topic des codeurs [6] */

Rolinh a écrit :

Alors pour le coup des 100 secondes c'est juste que... c'était une erreur ^^ En fait, on utilisait une autre fonction avant et il me semble qu'elle prenait des millisecondes.

Ok, c’est bien ce qu’il me semblait.

Rolinh a écrit :

En fait, il y a un problème avec le calcul de la taille. La taille de la queue passe subitement de la taille originale à 0 (remarqué cela en printant la valeur de l'élément depuis dequeue de queue.c).

Oui, j’avais remarqué ça aussi en faisant des tests hmm

Rolinh a écrit :

EDIT: j'suis trop bête... J'ai trouvé un moyen tout propre de faire ça smile (détails plus tard)

Bon cool alors, j’attends ta solution.



Bon /me go chercher son nouveau PC

Hors ligne

#464 Le 30/09/2011, à 09:56

Rolinh

Re : /* Topic des codeurs [6] */

En fait, j'avais premièrement utilisé g_timeout_add qui prend des millisecondes en paramètre pour passer à g_timeout_add_second qui prend des secondes...
Je suis revenu en arrière et utilise g_timeout_add finalement, pour plus de précision.

Pour l'histoire de la taille: avant, l'erreur était de vouloir ajuster la taille lorsqu'on enlevait l'élément de la queue. En fait, le fix est tout simple: la queue de copie et une variable globale et est de type list, définit dans list.h. Ce type comprend la taille de la liste dont le calcul se fait en ajoutant la taille d'un fichier au moment de son ajout à la liste de copie.
Le process de copie appel la fonction copy de copy.c qui copie effectivement. Cette fonction comprend la variable wcount de type ssize_t qui correspond à la taille de ce que l'on écrit dans le filedescriptor tant que le fichier n'a pas fini d'être copié. Il suffit donc de déduire la valeur de wcount à la taille de la queue globale à chaque morceau copié. Cela donne de plus une barre de progression super précise (ça change des barres "à la windows" qui vont en 5 secondes à 90% et reste bloquées à 90% pendant 10mn tongue ).

EDIT: le commit en question

EDIT2: j'avais oublié le cas ou le fichier est mappé en mémoire ^^ (nouveau commit donc)

Dernière modification par Rolinh (Le 30/09/2011, à 10:20)

Hors ligne

#465 Le 30/09/2011, à 11:18

grim7reaper

Re : /* Topic des codeurs [6] */

Ouais c’est comme ça que j’aurais fait moi aussi wink

Cela dit, ta gestion du read et des write me semble un peu drastique (il y a des cas que tu considères comme des erreurs alors que c’est facilement récupérable).
Je repasserais pour donner plus de détails.

Hors ligne

#466 Le 30/09/2011, à 11:21

Keldath

Re : /* Topic des codeurs [6] */

@The Uploader : tu ne dois pas utiliser le modulo à la place ?
En reprenant ta façon de faire, en Python :

#!/usr/bin/env python

def fizzbuzz():
    res_fb = {}
    for x in range(1, 101):
        res = not x % 3 and "Fizz" or ""
        res = not x % 5 and "{0}Buzz".format(res) or res
        res_fb[x] = res or x
    return res_fb

import pprint
pprint.pprint(fizzbuzz())

Hors ligne

#467 Le 30/09/2011, à 11:35

Rolinh

Re : /* Topic des codeurs [6] */

@grim: c'est possible. Il y a tellement de choses à peaufiner/retoucher... L'idée c'est surtout d'arriver aux fonctionnalités souhaitées pour cette première version de LinCopier puis après de faire une phase bêta où on reprendra tout le code afin de peaufiner, corriger et optimiser au mieux.

Hors ligne

#468 Le 30/09/2011, à 11:50

valAa

Re : /* Topic des codeurs [6] */

Bah oui The Uploader, ton FizzBuzz renvoie "FizzBuzz" pour tous les nombres >= 5...

Dernière modification par valAa (Le 30/09/2011, à 11:52)

Hors ligne

#469 Le 30/09/2011, à 12:04

The Uploader

Re : /* Topic des codeurs [6] */

Keldath a écrit :

@The Uploader : tu ne dois pas utiliser le modulo à la place ?
En reprenant ta façon de faire, en Python :

#!/usr/bin/env python

def fizzbuzz():
    res_fb = {}
    for x in range(1, 101):
        res = not x % 3 and "Fizz" or ""
        res = not x % 5 and "{0}Buzz".format(res) or res
        res_fb[x] = res or x
    return res_fb

import pprint
pprint.pprint(fizzbuzz())

Ah ouais, tests merdiques! >_<


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#470 Le 30/09/2011, à 12:08

grim7reaper

Re : /* Topic des codeurs [6] */

Les tests étaient censés le détecter, mais comme les tests sont foireux eux aussi big_smile



@Rolinh : en fait, quand tu fais read ou write tu considères que la copie a foiré si ça renvoie -1 ou si tu n’as pas tout écrit.
Mais c’est pas si simple.
POSIX (enfin The Open Group Base Specifications, c-à-d le truc équivalent qui ne coûte pas une burne) nous dit

The Open Group Base Specifications a écrit :

If write() is interrupted by a signal before it writes any data, it shall return -1 with errno set to [EINTR].

If write() is interrupted by a signal after it successfully writes some data, it shall return the number of bytes written.

Idem pour read :

The Open Group Base Specifications a écrit :

If a read() is interrupted by a signal before it reads any data, it shall return -1 with errno set to [EINTR].

If a read() is interrupted by a signal after it has successfully read some data, it shall return the number of bytes read.

Donc si tu reçois -1 il faut pas crier à l’erreur tout de suite et d’abord tester errno. S’il vaut EINTR t’a juste été interrompu donc il suffit de retenter l’écriture (ou la lecture).
Idem, si tu n’as pas tout écrit c’est pas dramatique.

Bon pour le moment, ton code semble pas utiliser les signaux (quoique que GTK ou la GLIB le font peut-être par derrière, donc on ne sait jamais), mais autant être blindé.
De même, depuis Linux 2.4.9 il semblerait que EINTR ne soit jamais positionné tant que tu bosses sur des fichiers (j’avais lu ça quelque part sur la lkml), même en NFS (par contre il peut toujours apparaître quand tu bosses avec des sockets, fifos ou pipes). Mais bon, comme je suppose que tu vises aussi BSD (et que là je ne connais pas le comportement) vaut mieux pas se baser là-dessus.

Pour info, ce comportement (interruption des appels système « lent » pour donner la main au gestionnaire de signal) vient de la philosophie UNIX :

https://secure.wikimedia.org/wikipedia/en/wiki/Unix_philosophy a écrit :

In these cases Ken Thompson and Dennis Ritchie favored simplicity over perfection. The Unix system would occasionally return early from a system call with an error stating that it had done nothing—the "Interrupted System Call", or an error number 4 (EINTR) in today's systems. Of course the call had been aborted in order to call the signal handler. This could only happen for a handful of long-running system calls, i.e. read(), write(), open(), select(), etc. On the plus side, this made the I/O system many times simpler to design and understand. The vast majority of user programs were never affected because they didn't handle or experience signals other than SIGINT or Control-C and would die right away if one was raised. For the few other programs—things like shells or text editors that respond to job control key presses—small wrappers could be added to system calls so as to retry the call right away if this EINTR error was raised. Thus, the problem was solved in a simple manner.

Dernière modification par grim7reaper (Le 30/09/2011, à 12:24)

Hors ligne

#471 Le 30/09/2011, à 12:29

The Uploader

Re : /* Topic des codeurs [6] */

FizzBuzz bon:

class FizzBuzzer
    def fizzbuzz
        hfb = {}
        for i in Range.new(1, 100)
            result = (i%3).zero? == true ? "Fizz" : ""
            result = (i%5).zero? == true ? result + "Buzz" : result
            hfb.merge! i => result
        end
        return hfb
    end
end

(prouvé par un puts tongue )

Maintenant mes tests restent foireux.

(oui je sais là pour le coup je fais pas vraiment du TDD tongue )


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#472 Le 30/09/2011, à 12:37

grim7reaper

Re : /* Topic des codeurs [6] */

The Uploader a écrit :

FizzBuzz bon:

class FizzBuzzer
    def fizzbuzz
        hfb = {}
        for i in Range.new(1, 100)
            result = (i%3).zero? == true ? "Fizz" : ""
            result = (i%5).zero? == true ? result + "Buzz" : result
            hfb.merge! i => result
        end
        return hfb
    end
end
            result = (i%3).zero? ? "Fizz" : ""
            result = (i%5).zero? ? result + "Buzz" : result

Fixed.
C’est moche de tester les booléens contre true ou false.

Hors ligne

#473 Le 30/09/2011, à 12:38

The Uploader

Re : /* Topic des codeurs [6] */

J'me disais bien que j'avais fait un brain fart.

Merci. smile

edit, version OK:

#! /usr/bin/env ruby
require "test/unit"

# Licence: WTFPLv2

#    Exercice FizzBuzz :
#    - si x divisible par 3 : Fizz
#    - si x divisible par 5 : Buzz
#    - si les deux : FizzBuzz
#    - si aucun : rien
# Et ce jusqu'à 100

class FizzBuzzer
    def fizzbuzz
        hfb = {}
        for i in Range.new(1, 100)
            result = (i%3).zero? ? "Fizz" : ""
            result = (i%5).zero? ? result + "Buzz" : result
            hfb.merge! i => result
        end
        return hfb
    end
end

class TestMyObject < Test::Unit::TestCase

    def initialize(arg)
        initialize_fizzbuzzer
        super
    end

    def initialize_fizzbuzzer
        @myfizzbuzobj = FizzBuzzer.new
    end

    def test_gives_a_hash_of_one_hundred_pairs
        assert_not_nil @myfizzbuzobj.fizzbuzz
        assert_equal Hash, @myfizzbuzobj.fizzbuzz.class
        assert_equal 100, @myfizzbuzobj.fizzbuzz.size
    end

    def test_is_fizzbuzz
        hfb = @myfizzbuzobj.fizzbuzz
        for i in Range.new(1, 100)
            assert_not_nil hfb[i]
            assert_equal "Fizz", hfb[i] if (i%3).zero? and !(i%15).zero?
            assert_equal "Buzz", hfb[i] if (i%5).zero? and !(i%15).zero?
            assert_equal "FizzBuzz", hfb[i] if (i%15).zero?
            assert_equal "", hfb[i] if !(i%3).zero? and !(i%5).zero?
        end
    end
end
max@max-laptop> ./fizzbuzz.rb                                                                                                                                              ~/Dev/csii-3/agile/FizzBuzz
Loaded suite ./fizzbuzz
Started
..
Finished in 0.001938 seconds.

2 tests, 203 assertions, 0 failures, 0 errors, 0 skips

Test run options: --seed 30008

Dernière modification par The Uploader (Le 30/09/2011, à 12:43)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#474 Le 30/09/2011, à 12:53

The Uploader

Re : /* Topic des codeurs [6] */

Bon maintenant c'est 3D, avec le framework XNA (C#):

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Fractales
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();
        }

        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here
        }

        /// <summary>
        /// UnloadContent will be called once per game and is the place to unload
        /// all content.
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: Add your update logic here

            base.Update(gameTime);
        }

        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here

            base.Draw(gameTime);
        }
    }
}

Sous Windows bien sûr.. hmm


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#475 Le 30/09/2011, à 13:00

Rolinh

Re : /* Topic des codeurs [6] */

@grim: c'est comme ça que tu voyais la chose?
Merci pour les infos à propos smile

Sinon, je suis en train de chercher un bug mais c'est pas très fructueux. En lançant une copie d'un dossier comportant plusieurs milliers de petits fichiers et dossiers, je me retrouve face à un "Error opening file : Too many open files". J'imagine donc qu'il y a un close qui ne doit pas marcher quelque part ou un oubli dans un cas particulier mais je n'arrive pas à mettre le doigt dessus.

Hors ligne