Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1441 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Suivante
Auteur Sujet :

Petit programme pour faire ses comptes ; C'est quoi ce gros bug

n°1502493
Profil sup​primé
Posté le 13-01-2007 à 11:33:50  answer
 

Reprise du message précédent :
Up  [:dawa_neowen]  
 

mood
Publicité
Posté le 13-01-2007 à 11:33:50  profilanswer
 

n°1502771
Profil sup​primé
Posté le 14-01-2007 à 17:15:46  answer
 

Bonjour,
J'ai fait mes test en connection full-duplex en local, j'aimerai bien fair des test sur le net.
 
Donc, j'ai overt une connection full-duplex entre client et serveur.
En fait, bien que l'architecture permete du full-duplex, en fait je m'en sert pour faire de la transimition automatique et j'ai à ce sujet un problème de mise à jour de l'information.
 
j'ai un paquetage P_Main ::=  

Code :
  1. Nombre_De_Connecte,
  2.   Nombre_De_Root,
  3.   Nombre_De_Forum,
  4.   Nombre_De_Chat,
  5.   Nombre_D_Ai,
  6.   Nombre_D_inscrit: natural := 0;
  7.   Root_Avaible : Boolean := false;
  8.   function Root return String;


une tache exclave, dans un thread_serveur, Output , qui transmet l'information::=

Code :
  1. task Output is
  2.                                          entry Stop;
  3.                                          entry set(Mode : T_Mode_Forum);
  4.                                       end Output;
  5.  
  6.                                       task body Output is
  7.                                          End_Of_Output : Boolean := False;
  8.                                          Current_Mode : T_Mode_Forum := Auto;
  9.                                       begin
  10.                                          while not End_Of_Output Loop
  11.                                             select
  12.                                                accept set(Mode : T_Mode_Forum) do
  13.                                                   Current_Mode := Mode;
  14.                                                end set;
  15.                                             or
  16.                                                accept Stop do
  17.                                                   End_Of_Output := True;
  18.                                                end Stop;
  19.                                             or
  20.                                                delay 0.125;
  21.                                                case Current_Mode is
  22.                                                   when Auto =>
  23.                                                      Boolean'Output(Channel_Out_root,P_Main.Root_Avaible);
  24.                                                     if P_Main.Is_Avaible(P_Main.Root_Avaible) then
  25.                                                        String'Output(Channel_Out_root,P_Main.root);
  26.  
  27.                                                        delay(5.0);
  28.                                                        P_Main.Root_Avaible := False;
  29.                                                     end if;
  30.                                                   when others =>
  31.                                                     null;
  32.                                                end case;
  33.                                             end select;
  34.                                          end loop;
  35.                                       end Output;


et le or delay() d'une tache client, qui receptionne l'information ::=  

Code :
  1. if Boolean'Input(Channel_In_root) then
  2.                                     Free(Current_Root);
  3.                                     Current_Root := new String' (String'Input(Channel_In_root));
  4.                                  end if;


 
donc le serveur regarde dans P_Main si une information est disponible, si l'information est disponible je la transmet au client qui l'attend alors.
 
 
je fait des operations dans le thread_server sur le P_main du genre  
 
                                    P_Main.Nombre_De_forum := P_Main.Nombre_De_forum - 1;
                                    P_Main.Root_Avaible := True;
 
                                    P_Main.Nombre_De_chat := P_Main.Nombre_De_chat + 1;
                                    P_Main.Root_Avaible := True;
                                    P_Main.Chat_Avaible := True;
 
 
le problème c'est que l'information arrive au client un nombre grandissant de secondes apères modification des données de P_Main
 
Est-ce normal ? Quel est le problème exactement ... quelle(s) solution à ce retard grandissant du délais de transmition de l'information ?
 
Merci pour vos reponse  :jap:
 
 
edit : les sources (pour linux) ::= client et serveur


Message édité par Profil supprimé le 15-01-2007 à 09:15:48
n°1503263
Profil sup​primé
Posté le 15-01-2007 à 17:55:49  answer
 

j'ai fat ça pour palier à certain problème
C'est le or delay de la tache Output du mode root

Code :
  1. delay 0.035;
  2.                                                case Current_Mode is
  3.                                                   when Auto =>
  4.                                                      if P_Main.Root_Avaible then
  5.                                                         if not Servi then
  6.                                                            Boolean'Output(Channel_Out_root,P_Main.Root_Avaible);
  7.                                                            String'Output(Channel_Out_root, P_Main.root);
  8.                                                           Servi := True;
  9.                                                         else
  10.                                                            Boolean'Output(Channel_Out_root,false);
  11.                                                         end if;
  12.                                                      else
  13.                                                         Servi := False;
  14.                                                         Boolean'Output(Channel_Out_root,false);
  15.                                                      end if;
  16.                                                   when others =>
  17.                                                     null;
  18.                                                end case;


Theoriquement ça doit avoir pour effet de ne transmettre l'information, le string'output, qu'une fois pas session de disponibilité de l'information ... ça à des inconveniant, j'y travail .... mais pour ce code, qui ne marche pas en fait, je voulais votre coup d'oeuil ... avant que je debug  :whistle:

n°1503360
Profil sup​primé
Posté le 15-01-2007 à 21:10:00  answer
 

j'ai fait ça :=  

Code :
  1. delay 0.035;
  2.                                                case Current_Mode is
  3.                                                   when Auto =>
  4.                                                      if P_Main.Root_Avaible then
  5.                                                        if not Servi then
  6.                                                            Boolean'Output(Channel_Out_root,P_Main.Root_Avaible);
  7.                                                            String'Output(Channel_Out_root, P_Main.root);
  8.                                                           Servi := True;
  9.                                                           Expire := Clock+5.0;
  10.                                                         else
  11.                                                            Boolean'Output(Channel_Out_root,false);
  12.                                                         end if;
  13.                                                      else
  14.                                                         if Clock > Expire then
  15.                                                            Servi := False;
  16.                                                         end if;
  17.                                                         Boolean'Output(Channel_Out_root,false);
  18.                                                      end if;
  19.                                                   when others =>
  20.                                                     null;
  21.                                                end case;

n°1503450
Profil sup​primé
Posté le 16-01-2007 à 07:52:55  answer
 

Bon ça marchait pas quand même, alors j'ai changé de stratégie, ... je cherche, ... et j'ai simplement placé de if clock > expire dans le or delay du client ... mais la pour l'instant ça n'a pas l'air de fonctionner et en plus je me tape une erreur de segmentation, bref.

n°1503451
Profil sup​primé
Posté le 16-01-2007 à 08:14:07  answer
 

J'ai un gros problème, je reçois des message du passé,
Je fais un mise à jour toute les 5 secondes est je reçois des message qui s'incremente de quelque millieme,
Y a un truc louche.

n°1503454
Profil sup​primé
Posté le 16-01-2007 à 08:35:11  answer
 

Ca y est, j'ai trouvé ... enfait je croyais avoir compris que string'output et string'input etaient bloquant, qu'il s'attendaient l'un l'autre mais pas dutout, donc j'ai placé un delay de 5 secondes dans le or delay de la tache output et ça tourne ... si non le reseau fesait tampon en fait.

n°1504441
Profil sup​primé
Posté le 17-01-2007 à 21:59:53  answer
 

Bonjour, bonsoir,
 
j'ai un petit souci de Socket_Error encore.
Je n'arrete pas de prendre des "Address alredy in use" alors, que je n'en utilise pas.
De plus le prog a fonctionné, puis à present ça ne fonctionne plus.
 
Donc, c'est un client reseau, utilisant Gnat.Sockets qui offre 4 connections au serveur pour obtenir 5 connections.
Mais au premier bind côté client, je leve l'erreur susdite.
 
les sources ::= main.adb.html
 
Merci
 

n°1676036
Profil sup​primé
Posté le 24-01-2008 à 09:44:13  answer
 

Yep, désolé, pour l'absence des pages liées à ce topic, ... j'ai cassé le disque cible.
 
Merci de votre compréhension  :whistle:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Petite programme de calculatrice en C[VB.NET] Creer une petit navigateur web [Résolu]
[help needed] gros problème avec flash[réglé] Aide sur un petit script.
un petit script a essayerNews et tableau en array : un peu trop gros
Petit soucis pour téléchargement d'un fchierNavigation par page 10*10, petit soucis
[EasyPhp] Gros problème de lenteur avec MySQLRecherche algo ou programme pour détection de plan
Plus de sujets relatifs à : Petit programme pour faire ses comptes ; C'est quoi ce gros bug


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR