11. september 2003 - 22:02
Der er
24 kommentarer og 1 løsning
Genopfriskning af time
Nu hvor jeg har en kode der viser lokal-tid ville jeg gerne have den til at blive ved med at tælle i samme projekt mens jeg kører resten af programmet. Kan dette lade sig gøre? ---source koden--- #include <stdio.h> #include <dos.h> #include <conio.h> int main() { clrscr(); struct date date; struct time time; getdate(&date); gettime(&time); printf("Today is %02d/%02d/%d, it's %02d:%02d:%02d", date.da_mon, date.da_day, date.da_year, time.ti_hour, time.ti_min, time.ti_sec); getch(); return 0; } Jeg havde tænkt mig at placere denne oppe i venstre hjørne via "gotoxy" og så skulle den gerne fortsætte med at tælle sekunder-minuter-timer..... mens jeg kører resten af mit program.
Annonceindlæg fra DE-CIX
11. september 2003 - 22:08
#1
Er det til at forstå hvad det er jeg er ude efter?
11. september 2003 - 22:22
#2
Ja. Selve opdateringen er simpel. Det er bare en for løkke der skriver og sover. Problemet er at få dit program til at køre videre samtidigt. Det er straks mere komplekst. Hvis du kører på Windows kan du starte en tråd. Men vi kommer altså hutigt ud i noget langhåret.
11. september 2003 - 22:26
#3
hmm det er vist også ved at være sent nu, måske jeg skulle fortsætte i morgen? godnat for nu ;)
11. september 2003 - 22:36
#4
og lige en lille godnat note: Ja jeg kører med win98 på de maskiner hvorpå programmet skal afvikles.
11. september 2003 - 23:54
#5
Win32 har en funktion CreateThread som kan starte en tråd. Det er ikke så svært. Men CreateThread og gotoxy passer ikke godt sammen. Det første er en Win32 (console) app. Det andet er gammel DOS kode som tilfældigvis supporteres endnu.
27. september 2003 - 13:41
#6
Kommet videre ?
28. september 2003 - 12:31
#7
nej jeg har givet op du kan bare svare, så får du points ;)
28. september 2003 - 13:16
#8
OK
28. september 2003 - 14:21
#9
Her er et sjovt lille eksempel: #include <time.h> #include <windows.h> #include <conio.h> #include <iostream> using namespace std; CRITICAL_SECTION cs; void loop1() { char c[] = { '|', '/', '-', '\\', '|', '/', '-', '\\' }; int i = 0; while(true) { EnterCriticalSection(&cs); gotoxy(40,10); cout << c[i % 8]; cout.flush(); LeaveCriticalSection(&cs); Sleep(1000); i++; } } void loop2() { while(true) { EnterCriticalSection(&cs); gotoxy(30,1); time_t t = time(NULL); cout << ctime(&t); cout.flush(); LeaveCriticalSection(&cs); Sleep(1000); } } DWORD __stdcall loop1dispatch(void *p) { loop1(); return 0; } DWORD __stdcall loop2dispatch(void *p) { loop2(); return 0; } void threadloop1() { DWORD id; CreateThread(NULL,0,loop1dispatch,NULL,0,&id); } void threadloop2() { DWORD id; CreateThread(NULL,0,loop2dispatch,NULL,0,&id); } int main() { InitializeCriticalSection(&cs); clrscr(), threadloop2(); loop1(); return 0; }
28. september 2003 - 14:22
#10
Så kan andre der har lyst lege med det. Det er som dsagt er forfærdelit misk mask af Borland specifikke DOS compatible kald (clrscr og gotoxy), standard C++ io (cout) og Win32 API (thread stuff).
28. september 2003 - 14:42
#11
using namespace std; forstår ikke? får en million fejl når jeg compiler desuden har du glemt ".h" på <iostream> //brixz
28. september 2003 - 14:43
#12
arne_v: hvilken compiler bruger du egentlig?
28. september 2003 - 14:45
#13
Jeg har ikke glemt .h på iostream. Nyere ANSI C++ compilere: #include <iostream> using namespace std; Ældre C++ compilere: #include <iostream.h>
28. september 2003 - 14:46
#14
Borland C++ 5.5 for Win32 (og som jeg har forsøgt at antyde så er clrscr og gotoxy ikke standard(
28. september 2003 - 14:47
#15
Ja - jeg bruger mange forskellige compilere - men jeg har brugt Borland til det her kode.
28. september 2003 - 14:53
#16
ikke standart? Men gotoxy og clrscr er da standart i C programmering måske ikke i C++
28. september 2003 - 14:54
#17
Nej - de er heller ikke en del af ANSI C.
28. september 2003 - 14:55
#18
Men jeg prøver lige at se om jeg an lave en ren Win32 API udgave.
28. september 2003 - 14:58
#19
men det vil kun have inflydelse hvis du prøver at bruge dem på andre styresystemer end windows ikke sandt?
28. september 2003 - 15:00
#20
Jeg bruger en compiler der hedder: Borland Turbo C++ version 3.0 Det er den eneste jeg har kunne få til at virke.
28. september 2003 - 15:02
#21
Den her bør køre på de fleste Win32 compilere (testet på BC++ 5.5, MS VC++ 6.0 og GCC 3.1): #include <time.h> #include <stdlib.h> #include <string.h> #include <windows.h> CRITICAL_SECTION cs; HANDLE console; void gotoxy(int x,int y) { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(console, pos); } void loop1() { char c[] = { '|', '/', '-', '\\', '|', '/', '-', '\\' }; int i = 0; while(true) { EnterCriticalSection(&cs); gotoxy(40,10); DWORD dummy; WriteConsole(console, &c[i % 8], 1, &dummy, NULL); LeaveCriticalSection(&cs); Sleep(1000); i++; } } void loop2() { while(true) { EnterCriticalSection(&cs); gotoxy(30,1); time_t t = time(NULL); DWORD dummy; char *s = ctime(&t); WriteConsole(console, s, strlen(s), &dummy, NULL); LeaveCriticalSection(&cs); Sleep(1000); } } DWORD __stdcall loop1dispatch(void *p) { loop1(); return 0; } DWORD __stdcall loop2dispatch(void *p) { loop2(); return 0; } void threadloop1() { DWORD id; CreateThread(NULL,0,loop1dispatch,NULL,0,&id); } void threadloop2() { DWORD id; CreateThread(NULL,0,loop2dispatch,NULL,0,&id); } int main() { system("CLS"); console = GetStdHandle(STD_OUTPUT_HANDLE); InitializeCriticalSection(&cs); threadloop2(); loop1(); return 0; }
28. september 2003 - 15:02
#22
og der kan jeg også bruge alle de bøger der er skrevet om c/c++ da man ikke skal over til alt det der using namespace noget. Jeg kan ikke forstår at man ikke beholder det gamle system. du taster ganske enkelt mindre ved at skrive <iostream.h> uden at bruge "using namespace"
28. september 2003 - 15:02
#23
TC++ er en 16 bit comiler mener jeg og kan derfor ikke bruge CreateThread.
28. september 2003 - 15:03
#24
28. september 2003 - 15:05
#25
Altså jeg forstår heller ikke helt hvorfor ANSI valgte som de gjorde. Men ...
Kurser inden for grundlæggende programmering