Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

30.09.2006, 18:09

Visual C++ 6 / Threads frage

Hi
ich hab eine normale kleine simple win32 anwendung geschrieben
und im debugger fenster steht nach dem beenden immer

Quellcode

1
2
The thread 0x90C has exited with code 0 (0x0)
The thread 0x320 has exited with code 0 (0x0)

jetzt meine frage, warum sind das 2threads ???
es ist doch nur ein programm am laufen.
widerum bei einem anderen programm wurde ein thread während das programm lief beendet, und der 2te erst als ich das fenster geschlossen hab.

Quellcode

1
2
3
4
5
The thread 0xE8C has exited with code 0 (0x0).
Loaded 'C:\WINDOWS\system32\mcd32.dll', no matching symbolic information found.
...
'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll', no matching symbolic information found.
The thread 0x9A4 has exited with code 0 (0x0).



hoffe mir kann da einer helfen, c++ an sich ist ganz leicht zu verstehen
aber das drumherum bzw. wie das ganze system funktioniert ist echt krass.


Gruss Tony[/code]

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

30.09.2006, 18:20

Absoluter Schuss ins blaue:

Eine dazugehörige Library die dynamisch geladen wird? Oder evtl sogar der Debugger?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

30.09.2006, 18:24

Nö aber das Fenster hat normalerweise ebenfalls ein eigenen Thread, wenn ich mich recht erinnere(bitte nicht hauen, wenn das jetzt absoluter Stuss ist, aber ich mein mich daran erinnern zu können).
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

4

30.09.2006, 18:44

Zitat von »"Nox"«

Nö aber das Fenster hat normalerweise ebenfalls ein eigenen Thread, wenn ich mich recht erinnere(bitte nicht hauen, wenn das jetzt absoluter Stuss ist, aber ich mein mich daran erinnern zu können).

hm aber warum wird das bei einer anderen anwendung die quasi 1:1 mit meiner ist ein thread wärend der laufzeit beendet und der 2te thread erst beim schliessen der anwendung. :?
(da scheint auch nur der unterschied zu sein das alles ohne funktionen
in der winmain gemacht wurde und keine includes verwendet werden)


naja ich wollt das hier nicht so mit code vollmüllen da ich mir übersicht schon zur
angewohnheit gemacht habe (dank an alle prozedurale programmiersprachen) :)

also hier der komplette sourcecode
(allerdings nicht so übersichtlich, da ich eine scrollsession niemanden zumuten
will ;) )
btw: ich habe erst vor kurzem mit c++ angefangen, verbesserungsvorschläge und
tipps sind sehr erwünscht.

main.cpp (ist das hauptprogramm bzw. hauptdatei)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
#include "app32.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    App32_CreateWindow();
    while(!CheckMsg())
    {

    }
    App32_Release();
    return 0;
}


app32.h

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
#ifndef A7_APP32_H
#define A7_APP32_H

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

void App32_CreateWindow();
void App32_Release();
LRESULT    CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int CheckMsg();

#endif


app32.cpp

Quellcode

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
#include "app32.h"

HWND        hWnd        = NULL;
HINSTANCE    hInstance    = NULL;

LRESULT CALLBACK WndProc(HWND hWnd,    UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

int CheckMsg()
{
    MSG msg;
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        if(msg.message == WM_QUIT) return 1;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

void App32_CreateWindow()
{
    WNDCLASS wc;
    hInstance            = GetModuleHandle(NULL);
    wc.style            = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wc.lpfnWndProc        = (WNDPROC) WndProc;
    wc.cbClsExtra        = 0;
    wc.cbWndExtra        = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = LoadIcon(NULL, IDI_WINLOGO);
    wc.hCursor            = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground    = NULL;
    wc.lpszMenuName        = NULL;
    wc.lpszClassName    = "A7D3D9E";
    RegisterClass(&wc);
    hWnd = CreateWindow("A7D3D9E", "A7Test", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
    ShowWindow(hWnd, SW_SHOWDEFAULT);
}

void App32_Release()
{
    DestroyWindow(hWnd);
    UnregisterClass("A7D3D9E", hInstance);
}

und wie man sieht keine externen dlls/libs - nur die ganzen standard libs.
und fehlerabfragen hab ich auch weggelassen damits schnell und leicht zu überfliegen ist.
achso und nochetwas, ist es eigentlich egal ob man jetzt:
LRESULT CALLBACK WndProc() hat oder
LRESULT WINAPI WndProc() ?

hab ich noch was vergessen ?
ja und danke an alle hier, die sich die mühe machen zu helfen.


Gruss Tony

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

30.09.2006, 18:46

Zitat von »"TonyMontana"«

LRESULT CALLBACK WndProc() hat oder
LRESULT WINAPI WndProc() ?
Gruss Tony

C-/C++-Quelltext

1
2
3
4
5
6
7
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define CALLBACK    __stdcall
#define WINAPI      __stdcall
#define WINAPIV     __cdecl
#define APIENTRY    WINAPI
#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall

Ist also "nur" eine Sache der Codegestaltung.

6

30.09.2006, 18:53

Zitat von »"Das Gurke"«


C-/C++-Quelltext

1
2
3
4
5
6
7
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define CALLBACK    __stdcall
#define WINAPI      __stdcall
#define WINAPIV     __cdecl
#define APIENTRY    WINAPI
#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall

Ist also "nur" eine Sache der Codegestaltung.


Hey Danke!
das ist ja höchstinteressant :oops:
warum auch einfach wenns kompliziert geht. :D
das mit den "aliases" ist mir auch schon bei D3D aufgefallen:
IDirect3D9 * = LPDIRECT3D9 :evil:


EDITIERT:
achso fast vergessen ich hab natürlich bei den project settings
c/c++ codegeneration -> user runtime libary auf "Debug Single Threaded" stehen


Gruss Tony

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

30.09.2006, 23:44

Wenn es dich so interessiert, dann schnapp dir den Debugger, geh dein Programm schrittweise durch und schau, wann der Thread geschlossen wird :)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

8

01.10.2006, 13:37

ich weiß ja wann er geschlossen wird, ich will aber wissen warum/wiso und weshalb :(

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

01.10.2006, 13:45

Bei welchen Befehl wird er den geschlossen?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

10

01.10.2006, 17:27

Zitat von »"Nox"«

Bei welchen Befehl wird er den geschlossen?

ja ein thread beendet sich nachdem ich destroywindow & unregisterclass
aufgerufen habe. der zweite thread endet sobald die winmain durchgelaufen ist.

EDITIERT:
oh man ich habs jetzt raus, ich werde langsam alt und dumm :(
der 2te thread ist Direct3D9!
SRY für so ein dummes Posting und Danke an alle die mir geholfen haben.


Gruss Tony

Werbeanzeige