GetOpenFileName et Thread générés [WIN32]

Résolu
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 25 avril 2008 à 16:51
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 25 avril 2008 à 22:21
Salut

Est il normale qu'après avoir exécuté la fonction GetOpenFileName, le nombre de thread du programme passe de 1 à 3!
Y a t'il un moyen de suprimer ces threads?

Voici le code qui permet au click gauche de la souris, d'ouvrir la boite de dialogue en question.(Projet généré avec les template de Brunews)

#define _WIN32_WINNT 0x0501
#define _WIN32_IE 0x0501
#include <windows.h>
//#include "resource.h"

HINSTANCE hinst;
HWND hmain;
char szappname[] = "ACHANGER";

LRESULT CALLBACK AppWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
    OPENFILENAME ofn;
    char szFile[MAX_PATH]={0};

  switch(mssg) {

      case WM_LBUTTONDOWN:

        szFile[0]=0;
        ZeroMemory(&ofn, sizeof(OPENFILENAME));
        ofn.lStructSize = sizeof(OPENFILENAME);
        ofn.hwndOwner = hwnd;
        ofn.lpstrFile = szFile;
        ofn.nMaxFile = MAX_PATH;
        ofn.lpstrFilter =0;
        ofn.nFilterIndex = 0;
        ofn.Flags =OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

        if (GetOpenFileName(&ofn)==TRUE)
        {
           
        }
       

          break;
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hwnd, mssg, wParam, lParam);
}

DWORD __stdcall InitInstance()
{
  WNDCLASSEX     wndcls;
  memset(&wndcls, 0, sizeof(WNDCLASSEX));
  wndcls.cbSize = sizeof(WNDCLASSEX);
  wndcls.lpfnWndProc   = AppWndProc;
  wndcls.style         = CS_HREDRAW | CS_VREDRAW;
  wndcls.hInstance     = hinst;
  wndcls.lpszClassName = szappname;
  wndcls.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
  wndcls.hCursor       = LoadCursor(0, IDC_ARROW);
  if(!RegisterClassEx(&wndcls)) return 0;
  hmain = CreateWindowEx(0, szappname, szappname, WS_OVERLAPPED | WS_VISIBLE | WS_SYSMENU,
                        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                        0, 0, hinst, 0);
  return (hmain != 0);
}

#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) int __stdcall myWinMain()
{
  __asm {
    push    0
    call    dword ptr GetModuleHandle
    mov     hinst, eax
    call    dword ptr InitInstance
    lea     ebp, [esp-28]
    test    eax, eax
    je      short progEXIT
    mov     esp, ebp
    mov     eax, hmain
    mov     esi, GetMessage
    push    SW_NORMAL
    push    eax
    mov     ebx, TranslateMessage
    call    dword ptr ShowWindow
    mov     edi, DispatchMessage
getMSG:
    push    0
    push    0
    push    0
    push    ebp
    call    esi
    test    eax, eax
    je      short progEXIT
    push    ebp
    call    ebx
    push    ebp
    call    edi
    jmp     short getMSG
progEXIT:
    push    0
    call    dword ptr ExitProcess
  }
}

Merci
Mon site internet : http://pistol.petesampras.free.fr

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 avril 2008 à 19:44
Pas le temps d'analyser leur appartenance mais pas grave du tout, les composants que le système conserve dans ton espace processus seront évacués par le système lui même si le besoin s'en fait sentir.
Ce sont les threads que tu pourrais créer explicitement qu'il conviendra de bioen gérer.

ciao...
BruNews, MVP VC++
3
jeffy131 Messages postés 123 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 29 mars 2009 1
25 avril 2008 à 21:00
 __asm {
    push    0
    call    dword ptr GetModuleHandle



C'est quoi cette horreur ?
Déjà commencer par coder propement (le Wizard Win32 VC fait ça très bien)
au lieu de mixer du code C et asm non optimisé et vraiment crade.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 avril 2008 à 21:19
"Wizard Win32 VC"
tu as vu un wizzard faire du 'sans CRT' ?

asm non optimisé pour un PUSH 0, elle est nouvelle celle là...

Je ne vois aucun mixage de code ici, les blocs sont full ASM ou full C.

User son clavier à polluer un post et nous déranger, on s'en passait largement.

ciao...
BruNews, MVP VC++
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
25 avril 2008 à 22:21
Merci Brunews d'avoir prit le temps de me répondre.

Jeffy>>Tu fais partie, avec Miquel75, des personnes qui me font le plus rire sur ce forum...

A+
Mon site internet : http://pistol.petesampras.free.fr
0
Rejoignez-nous