[VB] gestion des process / parallélisation de procédures

gestion des process / parallélisation de procédures [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 07-03-2003 à 22:34:43    

Bon un exemple tout con pour commencer
 

Code :
  1. Sub procedure2()
  2. Debug.Print "machin"
  3. End Sub
  4. Private Sub Command1_Click()
  5. Debug.Print "truc"
  6. Call procedure2
  7. Debug.Print "bidule"
  8. End Sub


 
Dans la pratike, kand on clike sur le bouton Command1, ça attake sa procédure associée, puis ça passe à procedure2, & une fois k'elle est finit, ça revient dans Command1_Click
Je voudrais ke ça m'execute Command1_Click en entier, et que quand ça passe sur l'appel de l'autre procédure, ça la lance en //
C possible en VB  :??:

Reply

Marsh Posté le 07-03-2003 à 22:34:43   

Reply

Marsh Posté le 07-03-2003 à 22:38:12    

Le multithreding marche mal en VB. C'est "possible" par les API mais d'une rare instabilité ...

Reply

Marsh Posté le 08-03-2003 à 00:01:24    

spossible d'avoir un ch'tit d'exemple de code avec du multithreading dedans  :??:

Reply

Marsh Posté le 08-03-2003 à 00:10:25    

J'en ai vu trainer par endroit mais c'est purement inutilisable, sauf pour des cas hyper simples... et tant que tu n'essayes pas de fermer ton app / tuer le Thread principal ;-)
 
Sur planetsourcecode tu devrait trouver des sample

Reply

Marsh Posté le 08-03-2003 à 00:52:28    

tout ce ke j'ai vu, ça ressemble assez à du bricolage :/
bref pas compatible avec mon appli en cours ki elle devra tourner 24h/24 avec le moins de bugs possible évidemment :d
 
kel langage gère bien le multithreading ?
le C++ je supposes mais à chake fois ke j'en fais je me bats avec des bugs à la con ki sortent d'où sait pas où [:le kneu]

Reply

Marsh Posté le 08-03-2003 à 10:05:46    

Le C++ fait du multithreading très propre.

Reply

Marsh Posté le 08-03-2003 à 15:11:41    

Pas d'autre langage en vue ? :cry:
 
Paske le C++ :cry:
Kand je vois k'il faut preske 200 lignes de codes en VC++ pour faire la même chose k'en VB en ~15lignes à tout casser, ça me :cry:

Reply

Marsh Posté le 08-03-2003 à 15:33:18    

emploie C++Builder alors, pour manipuler l'interface graphique c'est proche de VB
Ou Delphi si tu veux pas faire de C++

Reply

Marsh Posté le 08-03-2003 à 16:22:48    

Je suis un grand défenseur du VB et je reconnais que pour prototyper un logiciel, c'est de loin de meilleur langage. De même pour certains petits projets.
 
Mais pour le multithreading, en plus d'utiliser un code très sale il est plus qu'instable à cause des grosses ruse que l'on est obligé d'employer... Alors qu'en VC++ en 2 lignes c'est fait proprement et d'une manière franchement super efficace.

Reply

Marsh Posté le 08-03-2003 à 16:44:40    

y a python!
 
edit: beaucoup de gens font encore du VB à outrance sous windows alors que la majorité des taches qu'ils accomplissent sont réalisables plus simplement, et plus rapidement avec python


Message édité par Taz le 08-03-2003 à 16:45:24
Reply

Marsh Posté le 08-03-2003 à 16:44:40   

Reply

Marsh Posté le 08-03-2003 à 16:58:52    

la réelle seule "exigence" ke j'ai, c k'on puisse utiliser l'agent microsoft dans ce langage [:spamafote]
(http://www.microsoft.com/msagent/)
c pour ça ke j'ai choisi le vb à la base, paske c en VB k'il est le simple à manipuler
 
exemple en vc++:
 

Code :
  1. #ifndef STRICT
  2. #define STRICT
  3. #endif
  4. //==========================================================================
  5. //
  6. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  7. //  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  8. //  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  9. //  PURPOSE.
  10. //
  11. //  Copyright (C) 1997-1998 Microsoft Corporation.  All Rights Reserved.
  12. //
  13. //--------------------------------------------------------------------------
  14. //
  15. // This sample demonstrates the simplest Microsoft Agent application
  16. //
  17. //==========================================================================
  18. #include <windows.h>
  19. #include <tchar.h>
  20. #include "AgtSvr.h"
  21. #include "AgtSvr_i.c"
  22. static const LPWSTR kpwzCharacterOld = L"\\program files\\microsoft agent\\characters\\genie.acs";
  23. static const LPTSTR kpszAppTitle = _T("Microsoft Agent Samples" );
  24. extern "C" int PASCAL WinMain(HINSTANCE hInst,
  25.         HINSTANCE hInstPrev,
  26.         LPSTR lpCmdLine,
  27.         int nCmdShow) {
  28. HRESULT    hRes;
  29. _TCHAR    szError[256];
  30. VARIANT    vPath;
  31. BSTR    bszSpeak;
  32. long    lCharID;
  33. long    lRequestID;
  34. IAgentEx     *pAgentEx;
  35. IAgentCharacterEx  *pCharacterEx = NULL;
  36. // Initialize COM
  37.     if (FAILED(CoInitialize(NULL))) {
  38.  MessageBox(NULL,
  39.       _T("There was an error initializing COM." ),
  40.       kpszAppTitle,
  41.       MB_OK | MB_ICONERROR);
  42.         return -1;
  43. }
  44. // Create an instance of the Agent 2.0 server. NOTE: by
  45. // asking for an IAgentEx interface we know we will get
  46. // at least Agent 2.0. The CLSID also changed between
  47. // 1.5 and 2.0 so we know we won't get the 1.5 server.
  48. hRes = CoCreateInstance(CLSID_AgentServer,
  49.       NULL,
  50.       CLSCTX_SERVER,
  51.       IID_IAgentEx,
  52.       (LPVOID *)&pAgentEx);
  53. if (FAILED(hRes)) {
  54.  wsprintf(szError, _T("There was an error initializing Microsoft Agent, code = 0x%x" ), hRes);
  55.  MessageBox(NULL,
  56.       szError,
  57.       kpszAppTitle,
  58.       MB_OK | MB_ICONERROR | MB_TOPMOST);
  59.  CoUninitialize();
  60.  return -1;
  61. }
  62. __try {
  63.  // First try to load the default character
  64.  VariantInit(&vPath);
  65.  vPath.vt = VT_EMPTY;
  66.  hRes = pAgentEx->Load(vPath, &lCharID, &lRequestID);
  67.  if (FAILED(hRes)) {
  68.   // There's no default character. See if we can load the
  69.   // character from the directory used in most version 1.5
  70.   // applications.
  71.   vPath.vt = VT_BSTR;
  72.   vPath.bstrVal = SysAllocString(kpwzCharacterOld);
  73.   if (vPath.bstrVal == NULL) {
  74.    hRes = E_OUTOFMEMORY;
  75.    __leave;
  76.   }
  77.   hRes = pAgentEx->Load(vPath, &lCharID, &lRequestID);
  78.   // Did we successfully load a character?
  79.   if (FAILED(hRes))
  80.    __leave;
  81.  }
  82.  // Get the IAgentCharacterEx interface
  83.  hRes = pAgentEx->GetCharacterEx(lCharID, &pCharacterEx);
  84.  if (FAILED(hRes))
  85.   __leave;
  86.  // Set the language of the character
  87.  hRes = pCharacterEx->SetLanguageID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
  88.  if (FAILED(hRes))
  89.   __leave;
  90.  // Show the character.  The first parameter tells Microsoft
  91.  // Agent to show the character by playing an animation.
  92.  hRes = pCharacterEx->Show(FALSE, &lRequestID);
  93.  if (FAILED(hRes))
  94.   __leave;
  95.  // Make the character speak
  96.  bszSpeak = SysAllocString(L"Hello World!" );
  97.  hRes = pCharacterEx->Speak(bszSpeak, NULL, &lRequestID);
  98.  SysFreeString(bszSpeak);
  99.  if (FAILED(hRes))
  100.   __leave;
  101.  // This is a very simplistic sample.  Sleep for 10 seconds
  102.  // and then die.  
  103.  Sleep(10000);
  104. }
  105. __finally {
  106.  if (FAILED(hRes)) {
  107.   wsprintf(szError, _T("An error occurred in Microsoft Agent, code = 0x%x" ), hRes);
  108.   MessageBox(NULL,
  109.        szError,
  110.        kpszAppTitle,
  111.        MB_OK | MB_ICONERROR | MB_TOPMOST);
  112.  }
  113. }
  114. // Clean up
  115. if (pCharacterEx) {
  116.  // Release the character interface
  117.  pCharacterEx->Release();
  118.  // Unload the character.  NOTE:  releasing the character
  119.  // interface does NOT make the character go away.  You must
  120.  // call Unload.
  121.  pAgentEx->Unload(lCharID);
  122. }
  123. // Release the Agent
  124. pAgentEx->Release();
  125. VariantClear(&vPath);
  126. CoUninitialize();
  127. return 0;
  128. }


 
la même chose en VB (enfin là y'a une fonction en +) :
 

Code :
  1. Dim Genie As IAgentCtlCharacterEx
  2. Const DATAPATH = "genie.acs"
  3. Private Sub Form_Load()
  4.     Agent1.Characters.Load "Genie", DATAPATH
  5.     Set Genie = Agent1.Characters("Genie" )
  6.     Genie.LanguageID = &H409
  7.     TextBox.Text = "Hello World!"
  8. End Sub
  9. Private Sub Button_Click()
  10.     Genie.Show
  11.     Genie.Speak TextBox.Text
  12.     Genie.Hide
  13. End Sub

Reply

Marsh Posté le 08-03-2003 à 17:31:44    

en Delphi / C++Builder il doit y avoir des composants permettant d'utiliser ça aussi simplement

Reply

Marsh Posté le 08-03-2003 à 20:17:53    

LightKyle > j'ai l'impression que tu veux le beurre, l'argent du beurre et la crémière en sus.
 
OK, avec VB tu "programmes" rapidement ! Mais tu es tributaire de la façon dont Microsoft a encapsulé l'API Win32 dans les instructions VB.
 
D'un autre coté, ce que tu gagnes en souplesse, tu le perds en puissance.
 
Ceci dit, ton cas n'est pas perdu. Si tu tiens absolument à VB, alors VB .NET est ton ami. Non seulement il est bien mieux foutu que VB6, mais en plus il te permet de gérer le multithreading de façon très propre (le framework .NET contient des classes dédiées à la gestion des threads).
En plus il est gratuit sur le site de Microsoft, et dispose d'un IDE gratuit aussi : SharpDevelop, très proche de Visual Studio .NET dans son ergonomie.
 
Mais, car il y a un mais, tu devras réapprendre totalement le langage : il n'a rien à voir avec VB6 (et tant mieux d'ailleurs).


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-03-2003 à 20:22:06    

bon je vais voir pour VB.net
faudra bien ke je m'y mette un jour au .NET de toutes manières [:spamafote]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed