Avatar billede ultik Nybegynder
16. december 2000 - 14:16 Der er 5 kommentarer og
2 løsninger

Borland C++ Builder 3, dos.h, delay

Hej !

Jeg har et problem, jeg skal bruge delay(); funktionen til et konsolprogram jeg er ved at skrive, og jeg har fundet ud af at den skal ligge i dos.h...........

MEN DET GØR DEN IKKE !!!!

Er det C++Builder der har den et andet sted ?

Er det en korrupt dos.h jeg har ?
Avatar billede ultik Nybegynder
16. december 2000 - 20:56 #1
jeg er ret sikker på at der er noget galt med dos.h, i hjælpefilerne til builder er der et eksempel med int86, og det vil den heller ikke sluge !

den forstår ikke :

union REGS regs;

og heller ikke kaldet til selve int86 !

HVAD GØR JEG ? Er der nogen der har en version af dos.h der duer med BC++B ?
Avatar billede anjensen1 Novice
17. december 2000 - 01:34 #2
Hej!
Måske er det absolut nødvendigt for dig at bruge delay() metoden -og så dur den ger ikke!
-Ellers kan du bruge sleep(<Sek>) på hovedtråden
..men du skal bruge
#include <dos.h> //sleep, clrscr mm.

Her er en simpel kode der skifter farve på text og pauser i ét sekd så man ka\' nå at se det:

for(i=0; i<30; i++)
{
cprintf(\"her er en streng\", en);
cout << \"  her via cout Der er INGEN baggrund!\";
cprintf(\"her er en 3 streng\", en);
cout<<endl;
textcolor(i);
textbackground(i+1);
sleep(1);
}
getchar();

Ka det bruges :)

an
Avatar billede ultik Nybegynder
17. december 2000 - 02:54 #3
sleep er med sekunder ikke ? og delay er med ms ?

i så fald skal jeg ihvertfald bruge delay, men hvad med REGS, den mangler jeg også, og den skal jeg bruge for at skifte til mode 13h
Avatar billede borrisholt Novice
18. december 2000 - 08:23 #4
Sleep og sleepEx arbejder i millisekunder !

Jens B
Avatar billede ultik Nybegynder
18. december 2000 - 11:47 #5
ok, men problemet ligger også i, at jeg ikke kan bruge den union der, og så skal jeg bruge asm til at skifte til mode 0x13h, altså VGA....
Avatar billede soepro Nybegynder
18. december 2000 - 15:42 #6
Hvis C++ Builder \"forhindrer\" dig i at anvender bla. int86, er det fordi du har valgt en forkert type application. Når du kører i Win32 mode (altså så alm. Windows applikation) får du ikke \"lov\" til at fyre de gammelkendte interrupt funktioner osv. afsted - der findes jo API-kald under WIN32 til dem alle - og så kan Windows stadig styre havd der sker. For at få lov at lave int86 (og andre gode \"gamle\" DOS ting, såsom absread) SKAL din applikation være en 16-bit applikation. Og den kan du kun lave med f.eks. Borland C 5.02 som følger med C++ Builder 4 PRO.

Men, men, men ... som du er inde på findes der en alternativ mulighed nemlig ASM direkte i koden. Du kan komme til de forskellige registre med _AX, _BX osv. husk blot at _AX altid røres i fbm. MOV osv., så initialiseringen af _AX registreret skal altid ske lige inden dit kald:

_AX = 013B; // Et eller andet interrupt
ASM
{
  int ax
}
res = _BX; // or whatever.

Jeg er ingen ørn i ASM, så syntaksen på d.o. er sikkert forkert - men ideen virker - jeg har selv anvendt den til at lave inport og outport som man heller ikke \"må\" lave i C++ Builder:

asm
  {
    mov  dx, portAddr
    mov  al, portData
    out  dx, al
  };
Avatar billede ultik Nybegynder
18. december 2000 - 16:11 #7
hmm, jeg bruger 3.0´, men vælger at lave en console application.....

kender godt den alternative måde, og har også source til det, men ville nu hellere gøre det på den anden måde....... nå, pyt, points givet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester