IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces de programmation Oracle Discussion :

[PRO*C] Multi-threading avec pthreads


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [PRO*C] Multi-threading avec pthreads
    Bonjour,

    Voilà quelques jours qu'on me demande d'investiguer dans la programmation multi-threadée en C et plus particulièrement en PRO*C. Comme dans mon message précédent, je suis nouveau dans le monde professionnel et j'ai donc aucune expérience avec ce genre de technologie.

    Les threads et la gestion de ceux ci n'est pas un problème. J'en ai déjà fait à l'école et refait ici pour faire des tests sur ma machine personnel.

    Le problème que je rencontre ici c'est l’intégration de la librairie pthread en PRO*C. J'ai essayé bêtement de mettre un #include <pthread.h> dans mon fichier.pc mais j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Pro*C/C++: Release 10.2.0.4.0 - Production on Wed Nov 23 13:34:10 2011
     
    Copyright (c) 1982, 2007, Oracle.  All rights reserved.
     
    System default option values taken from: /crelan/tst/ora_bin1/app/oracle/product/10.2.0/db_1/precomp/admin/pcscfg.cfg
     
    Error at line 5, column 10 in file DeleteRating_pthread.pc
    #include <var.h>
    .........1
    PCC-S-02015, unable to open include file
    Syntax error at line 123, column 2, file /usr/include/sys/var.h:
    Error at line 123, column 2 in file /usr/include/sys/var.h
            __cptr64        ve_lock;        /* RO: ptr to end of recordlock table*/
    .1
    Et ça continue encore pour 7 ou 8 bloc du même style. J'ai regardé un peu les Makefile qui sont là depuis longtemps, et apparemment dans le Makefile_precomp (fourni par oracle je suppose), il y'a déjà le lien -lpthreads.

    Première question, est ce que -lpthreads et -lpthread sont la même chose?

    Ensuite, comme dans http://franckh.developpez.com/tutoriels/posix/pthreads/, j'ai rajouté à la main dans le Makefile c (on va l'appeler comme ça) le CFLAGS -D_REENTRANT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include $(ORACLE_HOME)/precomp/lib/env_precomp.mk 
    include $(CREDITS_HOME)/mk/env_precomp_10.mk 
    
    .SUFFIXES: .o .c .f .y .l .s .sh .h .C .a .pc 
    
    # Credits stuff
    CREDITSLIBPATH=$(CREDITS_HOME)/lib
    CREDITSINC=$(CREDITS_HOME)/include
    
    #
    # Flags pour le compilateur (pthread) :
    #
    CFLAGS =-D_REENTRANT
    
    # libraries base names
    BASE=base
    DBERR=dberr
    FINLIB=finlib
    LIFLIB=liflib
    LETTLIB=lettlib
    REVLIB=revlib
    KRLLIB=krllib
    CKPLIB=ckplib
    STSLIB=stslib
    CTXLIB=ctxlib
    CORRLIB=corrlib
    JAVALIB=javalib
    
    CREDITSLIBS=-l$(BASE) -l$(DBERR) -l$(FINLIB) -l$(LIFLIB) -l$(LETTLIB) -l$(REVLIB) -l$(KRLLIB) -l$(CKPLIB) -l$(STSLIB) -l$(CTXLIB) -l$(CORRLIB) -l$(JAVALIB) -lm -lld -lclntsh -lcore10
    
    
    USERID=credit_dev/credit
    LIBDIR=$(LIBDIR32)
    MAKEFILE=Makefile
    OTTFLAGS=$(PCCFLAGS)
    CLIBS= $(TTLIBS_QA) $(LDLIBS)
    PROCPLSFLAGS= sqlcheck=full userid=$(USERID)
    PROCFLAGSSQL= sqlcheck=semantics userid=$(USERID)
    #PROCFLAGS= sqlcheck=semantics userid=$(USERID)
    #PROCPPFLAGS= cod=cpp cpp_suffix=C include=/usr/include include=/user/lpp/xlC/include
    PROCPPFLAGS= cod=cpp cpp_suffix=C $(CPLUS_SYS_INCLUDE)
    INCLUDE=$(I_SYM). $(PRECOMPPUBH) $(I_SYM)$(CREDITSINC)
    PROC=$(ORACLE_HOME)/bin/proc
    
    .pc.c:
    	$(PROC) $(PROCFLAGS) INCLUDE=$(CREDITSINC) DEFINE=DEBUGGING_CONTRACTS INAME=$< ONAME=$*.c
    
    .pc.o:
    	$(PROC) $(PROCFLAGS) INCLUDE=$(CREDITSINC) DEFINE=DEBUGGING_CONTRACTS INAME=$< ONAME=$*.c
    	$(CC) $(CFLAGS) $(CFLAGS32) -I$(CREDITSINC)  -g -c $*.c 
    
    .c.o:
    	$(CC) $(CFLAGS) $(CFLAGS32) -I$(CREDITSINC)  -g -c $*.c 
    Deuxième question, est-ce la bonne façon de faire (En sachant que ce "Makefile" là est appelé dans le vrai fichier appelé Makefile avec les commandes build etc etc)?

    Troisième question, est-ce que l'erreur que j’obtiens vient de ce genre de problème (Makefile défaillant) ou est-ce que cela peut venir d'autre chose?

    Et finalement, est-ce que je grille les étapes? Faut-il faire autre chose avec le système de précompilation pour avoir accès à pthread? D'après http://www.csee.umbc.edu/portal/help...ads.htm#997960, je n'ai rien trouvé d'autres comme procédures à faire...

    Je précise quand dans mon code source.pc, il n'y a pour le moment rien lié aux threads, la seul ligne est #include <phtread.h>.

    Merci beaucoup d'avance,
    Albin.

    PS : Par investiguer je veux dire que cela n'a jamais été utilisé là où je travaille et donc que personne n'a la moindre expérience avec cela.

    EDIT : Je sais meme pas à quoi sert le -D_REENTRANT vu qu'en vérifiant à ma machine de test les seules choses que je faisais c'était :

    -#include <lpthread>

    et gcc test.c -lpthread

    Donc je suis paumé... pourtant pour autant que je sache, je developpe sous un environnement UNIX...

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Bon déjà des nouvelles...

    J'ai testé le programme de test de thread de ma machine personnelle sur l'environnement de développement PRO*C et il compile parfaitement, je dois juste changer -lpthread par -pthread.

    Évidemment dans ce cas là, je n'utilise pas le pré-compilateur pro*c... mais au moins je sais que pthread est présent et fonctionnel.

    Merci beaucoup de votre aide et de votre de temps,
    Albin.

    EDIT : Et en essayant de compiler le programme de test avec les Makefile habituels, j'ai la même erreur...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Bon... c'est officiel j'ai perdu 3 jours de ma vie... En fait, en enlevant #include <*thread.h> cela fonctionne...

    Il semblerait que la gestion des threads à été incluse par défauts dans le compilateur pro*c utilisé ou les makefile ou jesaispasquoid'autre...

    Enfin, merci quand même de votre aide !

    Bonne journée,
    Albin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2011, 07h14
  2. [AC-2003] Multi-Threading avec une bibiothèque externe
    Par Lorito dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/05/2010, 11h23
  3. Multi-threading avec Graphics
    Par sayag dans le forum C#
    Réponses: 4
    Dernier message: 15/06/2007, 10h28
  4. Réponses: 1
    Dernier message: 17/11/2006, 23h21
  5. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo