Micro Systèmes n°103 décembre 1989
Micro Systèmes n°103 décembre 1989
  • Prix facial : 30 F

  • Parution : n°103 de décembre 1989

  • Périodicité : mensuel

  • Editeur : Société Parisienne d'Edition

  • Format : (203 x 271) mm

  • Nombre de pages : 222

  • Taille du fichier PDF : 182 Mo

  • Dans ce numéro : la recherche française en informatique.

  • Prix de vente (PDF) : gratuit

Dans ce numéro...
< Pages précédentes
Pages : 204 - 205  |  Aller à la page   OK
Pages suivantes >
204 205
TECHNIQUi sortie de WinBegin. On a la tâche « main », la tâche « window procedure » (de nom fnwpClient dans le source) et la tâche serveur (de nom PMThread). Notre programme aura donc trois tâches qui fonctionnent en mode asynchrone. Nous pouvons délaisser la tâche main et partir sur le fonctionnement des tâches « serveur » et « window procedure ». Ces deux tâches sont orientées messages. Elles vont toutes les deux recevoir des messages : la « window procedure », soit directement par PM, soit via la tâche main, la tâche serveur ne recevant de messages qu'à travers sa propre file d'attente. Dès que la tâche serveur est initialisée, celle-ci envoie un message à la « window procedure », lui annonçant que tout s'est bien passé. On peut observer à ce niveau que le message pourrait être envoyé soit via la file d'attente utilisée par PM (dans le programme hmq), soit directement à la window procedure. C'est ce qui est fait dans PMThread avec la fonction WinPostMsg. Arrivé à ce stade, PM va échanger un certain nombre de messages avec la « window procedure » ; la plupart de ceux-ci sont traités par l'appel WinDefwindowProc. Nous allons par conséquent nous intéresser uniquement aux événements directement liés à notre application. Une fois l'application dans un état stable sur l'écran, on peut dire qu'elle est juste en attente d'une action de l'utilisateur. A chaque action de l'utilisateur, un message va arriver sur la « window procedure », qui peut soit le traiter, soit laisser le système le faire via la fonction WinDefWindowProc. Nous avons donc nos deux tâches « window Procedure » et serveur en attente. Si on « clique » sur l'option « Ding-Dong » du menu de l'application, un message « WM_COMMAND » est envoyé à la « window procedure ». Ce message a pour paramètre d'accompagnement la valeur « MI_UN ». A réception de « WM_CMMAND » et « MI_UN », le programme sait donc que l'utilisateur a sélectionné l'option « Ding-Dong » du menu et peut agir en conséquence. Dans notre programme, on va passer par la fonction WCommand qui, elle-même, lance pour « MI_UN » la fonction Call_Request. Pendant ce temps, la tâche serveur est en attente sur l'instruction WinGetMsg. La fonction Call_Request se limite à initialiser des paramètres qui vont être transmis par la DialogProcedure (de nom fnwpDlgBusy) à la tâche serveur. Le lancement de la DialogProcedure se fait par l'appel de la fonction WinDlg- Box. La DialogProcedure « fnwpDlgBusy » va être le pivot de transmission et réception des messages de la tâche serveur. Après le lancement de WinDlgBox, la DialogProcedure fnwpDlgBusy va recevoir le message « WM_INITDLG ». Ce message, envoyé à chaque création d'une « Dialog- Box », permet, au niveau du programme, de faire l'initialisation de ressource propre à l'application. Dans notre DialogProcedure, on va envoyer aussi deux messages à la tâche serveur. Le premier, « CONNECT », est destiné à informer la tâche serveur de qui est à l'origine de la demande de requête. En fait, on envoie le « handle » de la DialogBox à la tâche. Le deuxième message, « WM_USER- BEEP », consiste en la requête elle-même. Dans les paramètres, on peut indiquer l'endroit où la réponse doit être écrite. Ainsi, dans l'application TPV, on donne le handle d'une « List Box ». La tâche serveur n'a plus qu'à envoyer des messages avec les informations nécessaires afin que le résultat apparaisse. A la réception du premier message, en l'occurrence « CONNECT », la tâche enregistre le handle de la fenêtre ayant fait la requête. A la réception du message « WM_USERBEEP », notre tâche secondaire va jouer une 204 - MICRO-SYSTEMES séquence de notes consécutives. Ensuite, un message « PROCESSED » est renvoyé à la DialogProcedure ayant fait la requête grâce au handle obtenu par le message « CONNECT ». A ce stade la tâche serveur se remet en attente de nouveaux messages. Revenons sur la DialogProcedure fnwpDlgBusy qui a fait la requête. Celle-ci, après la réception du message « WM_INITDLG » et l'envoi des deux messages « CONNECT » suivi de « WM_USERBEEP », s'est mise en état d'attente. Cette procédure va réagir sur deux messages qui sont « PROCESSED » et « NOT_PROCESSED ». Dans notre application, ces messages ne sont envoyés que par la tâche serveur. C'est grâce à ce mécanisme que les deux tâches se synchronisent. Dès la réception de « PRO- CESSED », la DialogProcedure renvoie un message à la tâche serveur, lui notifiant que la demande de requête est terminée. Ensuite, la DialogProcedure est terminée et l'on retourne au niveau précédant (la fonction Call_Request). Le processus réalisé sur le message « NOT_PROCESSED » est fondé sur le même principe. Une fenêtre de.message a été ajoutée, indiquant à l'utilisateur qu'une erreur est apparue. Finalement, on a exécuté la demande du « Ding- Dong » par l'intermédiaire de la tâche serveur. Sur le plan pratique, on peut exécuter dans la tâche serveur une requête SQL, la construction d'un graphique, un appel X25... Le schéma suivant va résumer l'échange des messages entre les deux tâches. Tâche Maitre Tâche Serveur TEREAD_IS_STARTED CONNECT WM_USERBEEP DISCONNECT PROCESSED Dans la suite de cet article vous allez trouver le squelette de l'application. Dans le prochain numéro, on étudiera l'implantation des DialogBox et l'appel aux fonctions SQL du moteur relationnel de l'IBM OS/2. Henri Jubin Iffifinfifflfffff***fflf ********** ifflfffilfintffinfi ffffffffffff fi fi fa Include relevant sections of the PM header file. 1/of *define ItCL_VID *devine INCL_DEV tdefIne INCL_DCSPROCESS tdefine INCL_DOSMEMMER *def ne INCL_WINCHELLDATA INCLWINWIUDOWM6P *define INCL_WIUMESSAGEMB *define INCL_WINDIALOGS *define INCL_WIMPUTTONS *define INCL_WINEDITCTLS *define INCL_WINLISTBOXES *define INCL_WININPUT edEfine INCL_WINMENUS CE'inE ! NCL_WINSCROLLBARS INCL_WINFRAMEMP ttE. 2 INCLWINSYS INCL_WINTRACKPEC7 e INELWINPOINTEPS INCL_W1NENTRYFIELDS *define INCL_AVIO *define INCL_GPIPRIMITIVESt.nclude Kos2.11', Décembre 1989
SYSTEMES 1stdic.h1 ainclude Iiinclude Tsarple.11'//Function Prototype extern int WideginIvoid) ; extern veid WintoopIvoid 1 ; extern void WinEndIvoid) ; extern void cdecl painIvoid) ; extern void cdecl NCoaaandIvoid far fhwnd,unsigned short Coesand) ; extern MRESULT EXPENTRY fnwpDleftusyI HWND hwndDlg, USHORT asg, MPARAM mol, MPARAM extern MRESULT EXPENTRY fnwpClientl HAND hwnd, USHORT asg, MPARAM api, MPARAM np2 I ; extern int PMPostThread (USHORT asg, MPARAM mol, MPARAM ep2) ; extern int CreateThread(HWND hwndCreator) ; extern. VOID KillThreadIvoid) ; exterr int Pflreadtbd(HAB habihread, PAITSG pqmsgThread) ; extern void PlIThread:void) ; e*tern void Call_RequestIvoid) ; _'usage des'ThreadsT avec l'IBM OS/2 13 hwndFrame = WinCreateStdWindow (HWTO_DESKTOP, NS VISIBLE, tfiCreate, soMainiind, IPSZlszTitle, OL, NULL, ID MAINSIND, ! PNLIND)thwndClient I ; if IhendFrame..NULL) a 1 return (BOK) FALSE ; a e WinShcaindowthwndFrate,TRUE) ; le p CreateThreed(hwreraae) ; a 1 return (POOL) TRUE ; ! * s le Desktop Hindou is parent f ! a Fraie Style a Control Data fi le Hindou Class nage */le Window Text et le Client style */a Module handle == this ecdule f//f Window ID */if Client Window handle a, a Fracs window n'a pas ete cree chec de la fonction outre la Frape window cree ante le thread d'inpressionucces de la fonction BOUCLE DE TRAITEMENT DES MESSAGES PM variables and fonctions'usage des °Threads" arec l'IBM 05/2 12//,tid MintoopIvoid) chilel 1,1:n6etdsgI hab, IPOMSG)tqrsg, a attente ressage (411hO)NULL, 0, 0)) KinDispatchMsg hat, IFHIMSGItqrsg I ; a envoi message pour traitement */VII heq ; 1* Message Queue handle */OMS qmsg ; /* Message structure f/ULONG fICreate ; HAE hab ; a Anchor block handle 1)1 HWND hwndFrame ; /e Client Window handle f/HNND hwndList ; a Client Hindou handle f/HlaND hwndClient ; If Client Hindou handle */CHAR stMainiind(BleHenriT ; /e Main Window ClassName 4/CHAR seitle(1301e IDeso TPV par H..lubin)Ti USHORT usTrnCode ; /e Transaction Code */MPARAM enTrnl, spire ; a Transaction Paraneters */1/11 VARIABLES DE LA THREAD//static RAB habThread ; /e thread anchcr block hanclE fi static HMD hmehreed ; /* Message gueue handle a ! static SEL selStack ; static char fpmstack ; static ULONG KillThreadSem. 0 ; a Seaaphore to signal that static HSEM hseeKillThread = tKillThreadSea ; fe second thread has ended. static int ThreadOK=0 ; static ULOND VioUsableSer = 0 ; /* Semaphore to signal that static HSEM hsenVioUsable = tVioUsableSer ; /e second thread is using bu"'x static RAND hwndParentmNULL ; stitic HYMD hwndUser.NULL ; lidefine STACKSIZE 0000 fdefine FTPEVER I fdefine MT 1 1OUVERTURE DE LA FENETPE PRINCIPALE i/int WinBeginlvoid)'f fenetre et file de messages principales de l'application fi rab m Ninlnaializel HULL) ; hnq m WinCreateMsgDueuel hab, 0 I ; ) 1nRegisterClassl hab, stMainlind, fnwpClient, CS_SIZEREDRAN, 0 1 ; flCreate = FCF_STANDARD:/e Initialise PM *1/* Create application asg queue f/le Register Window Class */le Anchor block handle et le Window Class nase */le Address of Window Procedure *//e Class Style *//e No extra window Nards */a Standard fracs window style cl FERMETURE DE LA FENETRE, oid WinEndI) KillThreadI) ; kinDestroylaindow1 hundFrare) ; ! e fenetre e ! WinCestroyMsaueue ; haq) ; /e file de ressages WinTereinate hab I ; le ancher bloc handle de la fenetre cl DosExit'I, 0) ; a retour normal au DOS en terminant */le toutes les taches fl e PROGRAMME PRINCIPAL : nid cdecl mainIvoid) if IliinBeginllmmTRUE)/e ouverture de la fenetre */klinLoopl) ; /f traitement des messages al WinEndll ; a fermeture de la fenetre al sage des nreals'avec l'IBM OS/2 14 1/TRAITEMENT DES COMMANDES pi void cdecl leparandt HNNO hwnd, USHORT Command) le Process the command fi switchlCommand) case NI UN : Cail_RequestI) ; break ; case MI _EXIT : WinhstlfsgI hwnd, WM_CLOSE, OL, OL) ; break ; il setch PROCEDURE DE TRAITEMENT DES MESSAGES DE LA FENETU CLIENT PRINCIPALE Décembre 1989 MICRO-SYSTEMES - 205



Autres parutions de ce magazine  voir tous les numéros


Liens vers cette page
Couverture seule :


Couverture avec texte parution au-dessus :


Couverture avec texte parution en dessous :


Micro Systèmes numéro 103 décembre 1989 Page 1Micro Systèmes numéro 103 décembre 1989 Page 2-3Micro Systèmes numéro 103 décembre 1989 Page 4-5Micro Systèmes numéro 103 décembre 1989 Page 6-7Micro Systèmes numéro 103 décembre 1989 Page 8-9Micro Systèmes numéro 103 décembre 1989 Page 10-11Micro Systèmes numéro 103 décembre 1989 Page 12-13Micro Systèmes numéro 103 décembre 1989 Page 14-15Micro Systèmes numéro 103 décembre 1989 Page 16-17Micro Systèmes numéro 103 décembre 1989 Page 18-19Micro Systèmes numéro 103 décembre 1989 Page 20-21Micro Systèmes numéro 103 décembre 1989 Page 22-23Micro Systèmes numéro 103 décembre 1989 Page 24-25Micro Systèmes numéro 103 décembre 1989 Page 26-27Micro Systèmes numéro 103 décembre 1989 Page 28-29Micro Systèmes numéro 103 décembre 1989 Page 30-31Micro Systèmes numéro 103 décembre 1989 Page 32-33Micro Systèmes numéro 103 décembre 1989 Page 34-35Micro Systèmes numéro 103 décembre 1989 Page 36-37Micro Systèmes numéro 103 décembre 1989 Page 38-39Micro Systèmes numéro 103 décembre 1989 Page 40-41Micro Systèmes numéro 103 décembre 1989 Page 42-43Micro Systèmes numéro 103 décembre 1989 Page 44-45Micro Systèmes numéro 103 décembre 1989 Page 46-47Micro Systèmes numéro 103 décembre 1989 Page 48-49Micro Systèmes numéro 103 décembre 1989 Page 50-51Micro Systèmes numéro 103 décembre 1989 Page 52-53Micro Systèmes numéro 103 décembre 1989 Page 54-55Micro Systèmes numéro 103 décembre 1989 Page 56-57Micro Systèmes numéro 103 décembre 1989 Page 58-59Micro Systèmes numéro 103 décembre 1989 Page 60-61Micro Systèmes numéro 103 décembre 1989 Page 62-63Micro Systèmes numéro 103 décembre 1989 Page 64-65Micro Systèmes numéro 103 décembre 1989 Page 66-67Micro Systèmes numéro 103 décembre 1989 Page 68-69Micro Systèmes numéro 103 décembre 1989 Page 70-71Micro Systèmes numéro 103 décembre 1989 Page 72-73Micro Systèmes numéro 103 décembre 1989 Page 74-75Micro Systèmes numéro 103 décembre 1989 Page 76-77Micro Systèmes numéro 103 décembre 1989 Page 78-79Micro Systèmes numéro 103 décembre 1989 Page 80-81Micro Systèmes numéro 103 décembre 1989 Page 82-83Micro Systèmes numéro 103 décembre 1989 Page 84-85Micro Systèmes numéro 103 décembre 1989 Page 86-87Micro Systèmes numéro 103 décembre 1989 Page 88-89Micro Systèmes numéro 103 décembre 1989 Page 90-91Micro Systèmes numéro 103 décembre 1989 Page 92-93Micro Systèmes numéro 103 décembre 1989 Page 94-95Micro Systèmes numéro 103 décembre 1989 Page 96-97Micro Systèmes numéro 103 décembre 1989 Page 98-99Micro Systèmes numéro 103 décembre 1989 Page 100-101Micro Systèmes numéro 103 décembre 1989 Page 102-103Micro Systèmes numéro 103 décembre 1989 Page 104-105Micro Systèmes numéro 103 décembre 1989 Page 106-107Micro Systèmes numéro 103 décembre 1989 Page 108-109Micro Systèmes numéro 103 décembre 1989 Page 110-111Micro Systèmes numéro 103 décembre 1989 Page 112-113Micro Systèmes numéro 103 décembre 1989 Page 114-115Micro Systèmes numéro 103 décembre 1989 Page 116-117Micro Systèmes numéro 103 décembre 1989 Page 118-119Micro Systèmes numéro 103 décembre 1989 Page 120-121Micro Systèmes numéro 103 décembre 1989 Page 122-123Micro Systèmes numéro 103 décembre 1989 Page 124-125Micro Systèmes numéro 103 décembre 1989 Page 126-127Micro Systèmes numéro 103 décembre 1989 Page 128-129Micro Systèmes numéro 103 décembre 1989 Page 130-131Micro Systèmes numéro 103 décembre 1989 Page 132-133Micro Systèmes numéro 103 décembre 1989 Page 134-135Micro Systèmes numéro 103 décembre 1989 Page 136-137Micro Systèmes numéro 103 décembre 1989 Page 138-139Micro Systèmes numéro 103 décembre 1989 Page 140-141Micro Systèmes numéro 103 décembre 1989 Page 142-143Micro Systèmes numéro 103 décembre 1989 Page 144-145Micro Systèmes numéro 103 décembre 1989 Page 146-147Micro Systèmes numéro 103 décembre 1989 Page 148-149Micro Systèmes numéro 103 décembre 1989 Page 150-151Micro Systèmes numéro 103 décembre 1989 Page 152-153Micro Systèmes numéro 103 décembre 1989 Page 154-155Micro Systèmes numéro 103 décembre 1989 Page 156-157Micro Systèmes numéro 103 décembre 1989 Page 158-159Micro Systèmes numéro 103 décembre 1989 Page 160-161Micro Systèmes numéro 103 décembre 1989 Page 162-163Micro Systèmes numéro 103 décembre 1989 Page 164-165Micro Systèmes numéro 103 décembre 1989 Page 166-167Micro Systèmes numéro 103 décembre 1989 Page 168-169Micro Systèmes numéro 103 décembre 1989 Page 170-171Micro Systèmes numéro 103 décembre 1989 Page 172-173Micro Systèmes numéro 103 décembre 1989 Page 174-175Micro Systèmes numéro 103 décembre 1989 Page 176-177Micro Systèmes numéro 103 décembre 1989 Page 178-179Micro Systèmes numéro 103 décembre 1989 Page 180-181Micro Systèmes numéro 103 décembre 1989 Page 182-183Micro Systèmes numéro 103 décembre 1989 Page 184-185Micro Systèmes numéro 103 décembre 1989 Page 186-187Micro Systèmes numéro 103 décembre 1989 Page 188-189Micro Systèmes numéro 103 décembre 1989 Page 190-191Micro Systèmes numéro 103 décembre 1989 Page 192-193Micro Systèmes numéro 103 décembre 1989 Page 194-195Micro Systèmes numéro 103 décembre 1989 Page 196-197Micro Systèmes numéro 103 décembre 1989 Page 198-199Micro Systèmes numéro 103 décembre 1989 Page 200-201Micro Systèmes numéro 103 décembre 1989 Page 202-203Micro Systèmes numéro 103 décembre 1989 Page 204-205Micro Systèmes numéro 103 décembre 1989 Page 206-207Micro Systèmes numéro 103 décembre 1989 Page 208-209Micro Systèmes numéro 103 décembre 1989 Page 210-211Micro Systèmes numéro 103 décembre 1989 Page 212-213Micro Systèmes numéro 103 décembre 1989 Page 214-215Micro Systèmes numéro 103 décembre 1989 Page 216-217Micro Systèmes numéro 103 décembre 1989 Page 218-219Micro Systèmes numéro 103 décembre 1989 Page 220-221Micro Systèmes numéro 103 décembre 1989 Page 222