Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » multithreading unter dos

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
15.09.2004, 13:43 Uhr
lubU



Hi Jungs,

hab mir mal die process.h angeschaut und das multitrheading unter dos
(entwicklungsumgebung ist Borland C++ Builder 5)

Wollte en Pongspiel machen und hab damit angefangen dass 2 Spieler
gleichzeitig den balken bewegen soll (bzw die 2 buchstaben) da ich hier schon gescheitert bin. Es scheint nicht zu funktionieren dass beide Spieler die Balken gleichzeitig bewegen können:


C++:
#include <process.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void nummer1();
void nummer2();

int a=1;

int main(int argc, char* argv[])
{
        _setcursortype(_NOCURSOR);
        clrscr();
        _beginthread(nummer1,0,NULL);
        _beginthread(nummer2,0,NULL);
        while(a)
        {

        }
        return 0;
}

void nummer1()
{
int x,y;
char taste=12;
x=1;y=12;
gotoxy(1,12);printf("a");


while(taste!=27)
{

   taste=getch();
   if(taste=='w')
   {
    gotoxy(x,y);printf(" ");
    y--;
    gotoxy(x,y);printf("a");
   }
   else if(taste=='s')
   {
    gotoxy(x,y);printf(" ");
    y++;
    gotoxy(x,y);printf("a");
   }
}

a=0;
_endthread();
}



void nummer2()
{
int a,b;
char taste2=12;
a=80;b=12;
gotoxy(a,b);printf("b");


while(taste2!=27)
{

   taste2=getch();
   if(taste2=='i')
   {
    gotoxy(a,b);printf(" ");
    b--;
    gotoxy(a,b);printf("b");
   }
   else if(taste2=='k')
   {
    gotoxy(a,b);printf(" ");
    b++;
    gotoxy(a,b);printf("b");
   }
}

_endthread();
}



bin mir auch nicht sicher ob ich die thematik hier richtig angehe


Gruss,

lubU
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.09.2004, 13:46 Uhr
typecast
aka loddab
(Operator)


Jo, also mit Threads und ANSI passen leider nicht zausammen. Da ich nicht weiss ob der Borland da eigene Klassen fuer mitbring verschieb ich mal nach Win-API ---->
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.09.2004, 15:13 Uhr
(un)wissender
Niveauwart


Unter dos gibt es keine Multithreading, das musste schon selbst implementieren.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.09.2004, 15:48 Uhr
ao

(Operator)



Zitat von (un)wissender:
Unter dos gibt es keine Multithreading, das musste schon selbst implementieren.

... oder einen 3rd-Party-Multitasking-Kernel verwenden, zum Beispiel FreeRTOS (http://www.freertos.org). Du brauchst einen Compiler für 16-Bit-DOS-Programme (!).

Warum willst du das mit DOS machen? Das tut doch weh.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.09.2004, 17:10 Uhr
lubU



naja also meines wissen gibt es unter dos multithreading.
der borland builder gibt das ja auch so an und stellt die headerdatei zu verfügung.

mein code lässt sich ja auch compilieren.
ich kann auch abwechselnd mit den balken (buchstaben) hoch und runter
nur nach kurzer zeit spackt alles und ich kann nix mehr bewegen und ich weiss net wieso.

wenn mulitthreading nicht möglich ist wie ist dann ein spiel wie Pong (unter Dos)
machbar????????

gruss, lubU

P.S.:
wieso ich das unter Dos mache?
weil ich bisher nur unter dos C gecodet hab und da auch noch
en bisschen weiter rum experimentiern möchte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.09.2004, 17:51 Uhr
Spacelord
Hoffnungsloser Fall


DOS != 32Bit Windows-Konsole !!

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.09.2004, 18:02 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Genau du darfst die Konsole nicht mit DOS verwechseln. Multithreading ist erst mit Windows möglich.

Auf die Frage mit dem Pong: Damit zwei User was machen können muss man nicht unbedingt 2 Threads haben...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.09.2004, 18:45 Uhr
~colt44ever
Gast


geht vielleicht auch unter dos?

(hab den dev-cpp compiler und da funktioniert mein programm mit einem thread)

hier ist ein simples beispiel bei dem du eine zahl drueckst und es gibt dir dann die zahl und die Zeit in Sekunden bis du enter gedrueckt hast.

bsp.:


C++:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<process.h>
#include<time.h>

void stoppuhr(void *ch);

int iStopThread = 1;
int iSeconds = 0;

int main ()
{
    int iNumber = 0;

    _beginthread(stoppuhr,0,NULL);

    printf("Enter a number>\t");
    scanf("%d",&iNumber);

    iStopThread = 0;

    printf("\nYou have pressed %d in %d seconds",iNumber,iSeconds);

    getch();
    return 0;
}

void stoppuhr(void *ch)
{
    time_t start;
    
    while(iStopThread)
    {
        time(&start);
        while(difftime(time(NULL),start)<1);
        iSeconds++;
    }
    
    _endthread();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.09.2004, 20:22 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Argh
Es gibt KEIN Multithreading unter DOS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.09.2004, 21:02 Uhr
Spacelord
Hoffnungsloser Fall



Um es mal am Rande zu erwähnen.Man sollte _beginthreadex anstelle von _beginthread benutzen.

_beginthread ruft intern CreateThread auf.Dabei wird eine Funktion mit dem Namen _threadstart und,als einziger Parameter,der Funktionspointer den man _beginthread mitgegeben hat übergeben._threadstart richtet einen Exception Block ein innerhalb dessen dann letztendlich die übergebene Threadfunktion ausgeführt wird.
Soweit so gut,ist die Threadfunktion aber abgearbeitet wird sofort _endthread aufgerufen.
_endthread seinerseits gibt die belegte _ptiddata-Struktur frei(das ist die Struktur die benötigt wird um die C Runtime threadsicher zu machen),schliesst das Handle des Threads und ruft ExitThread mit dem Standardwert 0 auf.
Dadurch dass _endthread CloseHandle aufruft besteht theoretisch die Möglichkeit dass _beginthread ein ungültiges Handle zurückliefert.Das ist dann der Fall wenn die Threadfunktion schon abgearbeitet ist und _endthread aufgerufen wurde bevor _beginthread
sein Handle zurückliefern konnte.
Ab dem Aufruf von CreateThread trennen sich die Wege von _beginthread und der Threadfunktion sodass diese Möglichkeit theoretisch besteht.
Naja,lange Rede kurzer Sinn _beginthreadex macht das halt nicht.....

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: