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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

41

23.01.2008, 15:47

schau dir doch mal meine Lösung an. die tut genau was du willst. die MSDN "lösung" ist nacktes, schreckliches C... außerdem tut sie von sich aus nicht das was du willst...

42

23.01.2008, 15:48

Alle Lösungen die hier gepostet wurden können mehr und sind besser als die Lösung :D Naja was solls. Zu deinem functor-Template ($nooc) ... vllt daran denken das dein object da kopiert wird! Übergabe bei Value? Nein danke!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

43

23.01.2008, 19:20

hmmmm.. also gut.. irgendwie fällts mir schwer mich da durchzuringen ^^

aber wenn ihr das so sehr empfehlt, dann wird das schon berechtigt sein :D


hätte da gleich ne frage vorne weg..

wozu sind diese zeilen gut?

C-/C++-Quelltext

1
2
3
4
5
#if defined _MSC_VER && _MSC_VER >= 1020
#pragma once
#endif

#define WIN32_LEAN_AND_MEAN
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

44

23.01.2008, 19:28

C-/C++-Quelltext

1
2
3
4
5
6
#ifndef THREADING_H
#define THREADING_H

// eigentlicher header code


#endif  // THREADING_H


:roll: das sind normale include guards. die sorgen dafür, dass ein header nie mehr als einmal inkludiert werden kann.

C-/C++-Quelltext

1
2
3
#if defined _MSC_VER && _MSC_VER >= 1020
#pragma once
#endif


das sorgt ebenfalls dafür, dass die header datei nie mehr als einmal inkludiert werden kann. unter MSVC kann man #pragma once verwenden. das ist dort etwas effizienter als normale include guards. die erste zeile davon prüft nur ob mit MSVC kompilliert wird. wenn nicht greifen immer noch die normalen include guards.


C-/C++-Quelltext

1
#define WIN32_LEAN_AND_MEAN


das sorgt dafür, dass nur das notwendigste von windows inkludiert wird.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

45

23.01.2008, 19:42

die normalen header guards kannte ich ja wohl schon ^^

das mit MSVC hab ich nicht gewusst..


ok.. so ist das also..


jetzt kurz zu deiner lösung @ dot..

ich seh dass ich das eigtl. nicht viel anders machen würde..

den einzigen unterschied den ich hier erkenne ist, dass du die ThreadProc in der klasse Thread lässt, und dann noch eine zusätzliche klasse schreibst, die dann eine main() funktion enthält - für den thread vermutlich ^^.

ich hätte es so gemacht:

bei mir hat das Form meines servers eine statische ThreadProc, ne kleine klasse mit den informationen die gebraucht werden zum verarbeiten, und das wars ..

weiss nicht ob ich das jetzt gut genug erklärt hab sodass du verstehst was ich meine, aber soviel unterscheidet sich mein ansatz nicht von deiner lösung oder?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

46

23.01.2008, 19:45

Zitat von »"$nooc"«

weiss nicht ob ich das jetzt gut genug erklärt hab sodass du verstehst was ich meine, aber soviel unterscheidet sich mein ansatz nicht von deiner lösung oder?


ich versteh nicht ganz...zeig deinen ansatz doch mal^^

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

47

23.01.2008, 20:17

naja gut,, jetzt hab ich im endeffekt doch deine varante übernommen, jedoch hab ich jetzt ein problem ..

meine klasse frmServer soll irgendwann mal beim klicken eines buttons einen thread erstellen..

die sieht das mit deiner variante aus? mein thread muss ebenfalls mit ein paar elemetnen meines fensters (frmServer) arbeiten..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

48

23.01.2008, 20:35

Zitat von »"$nooc"«

meine klasse frmServer soll irgendwann mal beim klicken eines buttons einen thread erstellen..


gut, wo liegt das problem?

Zitat von »"$nooc"«

die sieht das mit deiner variante aus? mein thread muss ebenfalls mit ein paar elemetnen meines fensters (frmServer) arbeiten..


erklär mal genau was du vorhast. ich frag mich grad warum in einem "server" mehrere threads was mit einem fenster anstellen müssen...
anyway, auch hier: wo liegt das problem!? tu es halt einfach. wenn das fenster dir gehört wirst du wohl ein handle drauf haben, oder^^

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

49

23.01.2008, 21:10

naja.. also das server-formular stellt ja nur die gui dar..

mit dem klick auf den button "server starten" soll ein socket erstellt werden der dann auf verbindungen wartet bzw. eingehende daten verarbeitet (hierfür dann der neue thread)

jedoch wird es eben vorkommen dass ein client sich verbindet und was schreibt zb. und dann soll dass in meiner textbox stehn..

mir ist jetzt nur nicht ganz klar wie ich deine lösung konkret für meinen server anwende..


so sieht mein server form im moment aus:


C-/C++-Quelltext

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
// ------------------------------------

// c l a s s

// ------------------------------------

class frmServer : public Forms::Window
{
private:

    

    // ------------------------------------

    // m e m b e r _ v a r i a b l e s

    // ------------------------------------


    WinsockServer       *pWinsockServer;
    Threading::Thread   *pServerThread;
    CriticalSections    *pCriticalSections;


        // ------------------------------------

        // c o n t r o l s

        // ------------------------------------


    TextBox *txtLog;
    Button  *btnStartServer;
    Button  *btnShutDownServer;

    
    // ------------------------------------

    // m e m b e r _ f u n c t i o n s

    // ------------------------------------


    void    Load                    ();
    void    frmServer_Close         ();
    int     frmServer_StartServer   ();
    

public:

    // ------------------------------------

    // m e m b e r _ f u n c t i o n s

    // ------------------------------------


            frmServer                   ();
            ~frmServer                  ();
    int     frmServer_ProcessCommand    (WPARAM wParam, LPARAM lParam);

    //static    DWORD WINAPI    frmServer_ServerThreadProc  (LPVOID lpParam);



}; // frmServer




EDIT:

wenn ich mein formular von Threaded erben lasse..

C-/C++-Quelltext

1
2
class frmServer : public Forms::Window, public Threading::Threaded
{


dann meckert der compiler:

Zitat


Fehler 1 error C2259: 'frmServer': Instanz von abstrakter Klasse kann nicht erstellt werden
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

50

24.01.2008, 08:51

hab das problem gefunden.. hab den destruktor nicht definiert ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige