Zum Navigations-Menü
Kein Layout? Lesen Sie hier, warum...

Turbo Pascal

Forum



Alle Dateien dieses Themas

Dateiname Dateigröße geschrieben von Datum
THRDGAME.pas2.9KBBP9208.05.10 20:25Nachricht lesen
CrtDemo.pas4.4KBdimo09.05.10 19:12Nachricht lesen
threadtest.pas3.5KBHorst12.05.10 11:01Nachricht lesen
THRDGAME.pas3.4KBBP9216.05.10 23:38Nachricht lesen

1 Bildschirmprobleme bei Verwendung von TThread

Autor: BP92 (R) (IP bekannt)
Datum: 08. Mai. 2010 20:25

Hallo liebe Forumgemeinde,

ich habe mich nun mal mit dem Thema Multithreading etwas befasst und als Moeglichkeit die Klasse TThread aus der Unit classes gewaehlt. Als Idee hatte ich dabei ein simples Spiel, bei dem ein Zeichen auf dem Bildschirm bewegt wird. Entweder soll das Spiel mit der Esc-Taste abgebrochen werden, oder wenn im Hintergrund ein Timer abgelaufen ist. Eben fuer den Timer brauchte ich nun einen zweiten Thread.

Der Compiler (FreePascal 2.4.0) akzeptiert den Code auch klaglos, nur erscheinen in der Konsole leider nicht die richtigen Zeichen an der richtigen Stelle. Weder die "Spielfigur", noch andere Textausgaben werden fehlerfrei dargestellt.

Woran liegt das oder was mache ich noch falsch?

Muss ich noch die Methode Synchronize irgendwo einbauen? Wenn ja, wo denn nur... :)

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig




1 mal bearbeitet. Zuletzt am 08.05.10 20:25 von BP92.

Anhänge:

Antworten | Zitieren

2 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: dimo (R) (IP bekannt)
Datum: 09. Mai. 2010 07:35

Hi,

gibt es da auch ein Ziel, wo das Zeichen hinbewegt werden soll, oder soll das Zeichen einfach
nur solange bewegt werden, bis die Zeit abgelaufen ist?

Antworten | Zitieren

3 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 09. Mai. 2010 13:08

Hallo dimo,

das Zeichen soll einfach nur so umherbewegt werden, ohne tieferen Sinn. ;) Das ganze soll nur dazu sein, im Hintergrund einen Timer laufen zu lassen, der das Spiel beendet, wenn nicht schon vorher Esc gedrueckt wurde.
Wenn ich alles, was mit dem Wort "Thread" stilllege, funktionierts, aber dann hab ich eben keinen Timer mehr...
Das Problem liegt eigentlich nur an der Bildschirmausgabe. Es muss doch moeglich sein, bei der Verwendung mehrerer Threads trotzdem noch saubere Ausgaben zu bekommen. Ich weiss nun auch, dass man in der Execute-Prozedur des neuen Threads besser keine Bildschirmausgaben macht, aber wenn ich das auskommentiere, stimmen die Bildschirmausgaben immer noch nicht.

Die Frage ist eben, warum TThread scheinbar nicht richtig mit der CRT zusammenarbeitet...

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig

Antworten | Zitieren

4 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: Horst (R) (IP bekannt)
Datum: 09. Mai. 2010 13:28

Hallo,

gibt es für soetwas nicht die critical section?
entercriticalsection... GOTOXY ,Write ausführen  leavecriticalsection

[www.freepascal.org]
[www.freepascal.org]
oder hier
[wiki.lazarus.freepascal.org]
In Delphi ist die VCL auch nicht überall threadsicher-> criticalsection benutzen

Gruß Horst

Antworten | Zitieren

5 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: dimo (R) (IP bekannt)
Datum: 09. Mai. 2010 19:33

Hi BP92,

also, ich habe mal dein Programm ausprobiert, aber ich wüsste auch nicht wo jetzt genau der Fehler liegt,
vielleicht liegt das an den ganzen "gotoxy" , weil ja das Wort "Noch" bzw. "Xoch" zweimal auf dem Bildschirm erscheint,
oder nach Ablauf der Zeit erscheint das Wort "Xochern". Jedenfalls habe ich im Anhang ein Beispiel-Programm aus meinem
Turbo Pascal beigefügt, was glaube ich, nach dem selben Prinzip funktioniert, also man kann den Cursor in jede xbeliebige
Richtung bewegen,
vielleicht Kannst du dir ja dort ein Paar
Ideen holen.

Anhänge:

Antworten | Zitieren

6 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 09. Mai. 2010 22:53

Hallo,

@ Horst: werde die CriticalSection-Befehle mal ausprobieren. Ein bischen dazu habe ich mir schon angelesen. Versuche mir das grad irgendwie selbst beizubringen ;)
Stimmt es, wenn eine CriticalSection ausgefuehrt wird, dass alle anderen Threads dann angehalten werden?

@ dimo: das "gute alte" CRTDEMO, das kenn ich auch, ist bei meiner Borland Pascal 7 Installation auch dabei gewesen. :) Das arbeitet aber nur in einem Thread, dem Main Thread. Mit Turbo Pascal ist das sog. Multithreading leider noch nicht moeglich, dazu braucht man FreePascal. Aber trotzdem danke ;)

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig

Antworten | Zitieren

7 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: Horst (R) (IP bekannt)
Datum: 10. Mai. 2010 08:03

Hallo,

alle Threads warten am Eingang der criticalSection, wenn sie dort "ankommen". Erst dort müssen sie warten, bis dieser Codeabschnitt frei ist, sonst können sie weiter in ihrem (Quell)Text.
CriticalSection->  Een vor Een Einer nach dem anderen.

Gruß Horst

Antworten | Zitieren

8 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: Horst (R) (IP bekannt)
Datum: 12. Mai. 2010 11:01

Hallo,

äußerst merkwürdig das alles?????
Die Threadverarbeitung wird doch unter Windows in der Unit system erledigt. Classes wird also dafür nicht mehr gebraucht.

Ich habe 'A' als Markierung der momentanen Position benutzt und '0123456789' als Löschtext statt ' '.
Aber was passiert--->

Steuern mit w, a, s, d                                          Noch 13,96




      Aochern miiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
      Aochern mi                              Aochern mi
      Aochern mi                              Aochern mi
      Aochern mi                              Aochern mi
      Aochern mi                              Aochern mi
      Aochern mi                              Aochern mi
      Aochern mi         AAAAAAAAAAAAAAAAAAAAAAochern mi
      Aochern mi         Aochern miiiiiiiiiiiiiii
      Aochern mi         Aochern mi
      Aochern mi         Aochern mi
      Aochern mi         Aochern mi
      Aochern mi         Aochern mi
      Aochern mi         Aochern mi
      Aochern mi
      Aochern mi
      Aochern mi
      AAAAAAAAAAAAAAAAAchern mi


AochernAoAoAoAochern mi


Der Löschtext wird nicht kopiert, sondern ein anderer, der 'Steuern mit w, a, s, d' enthält, der dann mit 'Noch' überschrieben wurde und anschliessend durch Buchstabe 'A'.
Das passiert alles vor BeginThread.
Ab dann wird es aber alles Unsinn.
Es wird nur noch die Länge des Textes richtig übertragen aber sonst bleibt es der alte Text.
Was soll man damit anfangen?
Es wird also der Platz des ersten Textes immer wieder genutzt, aber nicht korrekt überschrieben.

Gruß Horst

EDIT:
Wer lesen kann, ist klar im Vorteil....
[www.freepascal.org]
Zitat:

The CRT unit is not thread safe.




1 mal bearbeitet. Zuletzt am 12.05.10 11:05 von Horst.

Anhänge:

Antworten | Zitieren

9 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 12. Mai. 2010 16:28

Hi Horst,

das mit dem "nicht thread safe" hab ich auch gelesen. Wollte es halt mal ausprobieren...
Ich bin am ueberlegen, ob ich die Unit "Video" ersatzweise fuer CRT nehmen soll. Video soll ja plattformunabhaengig sein. Jedenfalls reicht es mir, wenn es unter Windows laeuft. Nur hat die Unit Video nicht so schoene Routinen wie READKEY, soweit ich das bisher betrachte. Ich brauche aber doch eine Moeglichkeit, wie man die Tastencodes aehnlich wie mit READKEY auslesen kann.

Das mit der Laenge der STRINGs, die noch richtig ist, war mir auch aufgefallen. ;) Aber das Ueberschreiben auf dem Bildschirm hat ueberhaupt nicht mehr funktioniert.

Es muss doch aber eine Moeglichkeit geben, in einem Konsolenfenster mehrere Threads laufen zu lassen, ohne dass sich Bildschirmausgaben gegenseitig stoeren (auch im Vollbildmodus!!!), und ohne auf die Funktionen, die z.B. CRT bietet, verzichten zu muessen...

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig

Antworten | Zitieren

10 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: Horst (R) (IP bekannt)
Datum: 12. Mai. 2010 17:54

Hallo,

[rvelthuis.de] sollte eine Möglichkeit in Windows bieten, die unit CRT zu ersetzen.

Gruß Horst

Antworten | Zitieren

11 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 15. Mai. 2010 13:32

Hallo Horst,

habe die Console Unit angeschaut. Laesst sich aber irgendwie nur mit Delphi kompilieren. Habs mit FreePascal nicht geschafft.

Wie auch immer, danke dass du mich ueberhaupt erst auf die Idee gebracht hast, die CRT Unit komplett gegen eine andere zu ersetzen :)

Das Ergebnis der aktuellen Bemuehungen ist im Denkpause Forum im Thema "Konsolen-Adventure" zu finden... Es ist eine Kombination aus den Units video, keyboard und sysutils, um die aus CRT bekannten Routinen nachzubilden.

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig

Antworten | Zitieren

12 Re: Bildschirmprobleme bei Verwendung von TThread

Bewertungen: 0 negativ/0 positiv

Autor: BP92 (R) (IP bekannt)
Datum: 16. Mai. 2010 23:38

Hallo nochmal,

vielleicht im Sinne einer Loesung haenge ich das bearbeitete Codebeispiel aus dem Anfang dieses Themas mal an. Habe alles soweit abgeaendert, dass die Bildschirmausgaben sauber funktionieren und auch alles auf die neue conio32-Unit umgestellt.

-- 
PASCAL Programmierer aus Leidenschaft

Turbo Pascal Beispiele fuer Anfaenger: [www.webplain.de]

Momentane Projekte:
-----------------------
Konsolen-Adventure Game mit FreePascal (im Denkpause-Forum) [www.webplain.de]
Funktionsplotter und -rechner; Vorabversion gibt's hier: [www.webplain.de]
Objektorientierte Textmodus-GUI; Release-Termin: groesstenteils fertig

Anhänge:

Antworten | Zitieren

Hinweise

  1. Das hier ist kein Hausaufgabenservice. Konkrete Fragen werden natürlich gerne beantwortet.
  2. Probieren Sie doch zuerst die Suchfunktion aus und werfen Sie einen Blick in die FAQ.
  3. Ein aussagekräftiger Betreff ist wichtig, unter »HILFE!!!« kann man sich nichts vorstellen. Bitte nicht nur Großbuchstaben.
  4. Anhänge zu Ihrem Projekt (max. 250 KB) können helfen, das Problem schnell zu lösen.
  5. HTML-Tags sind aus Sicherheitsgründen nicht möglich.
  6. Quelltext können Sie mit [code]Quelltext[/code] formatieren.
  7. Alle weiteren möglichen Forum-Tags können Sie hier nachlesen.
Neuen Beitrag erstellen










Datei anhängen
  • Folgende Dateitypen können angehängt werden:
    asm, bgi, bmp, c, cc, cpp, gif, inc, jpg, obj, pas, pdf, png, rar, rtf, tpu, txt, zip, frm, vbp
  • Die Dateien dürfen jeweils nicht größer sein als 250KB.
  • 3 zusätzliche Dateien können an den Beitrag angehängt werden.



Nach oben
© 2000-2010 Clemens Weiß | Webplain.de
Link zu dieser Seite | Letzte Änderung: 26. Okt. 2008