cronometru

Acest forum este dedicat intrebarilor de programare care nu-si au locul in unul din celelalte forumuri
Post Reply
viorel2004ro
Membru
Membru
Posts: 67
Joined: 20 Mar 2008, 23:23

cronometru

Post by viorel2004ro » 23 May 2008, 19:50

salut

Cum fac intr-o aplicatie consola ca operatia de citire sa dureze 15 secunde de exemplu?
Adica daca utilizatorul nu introduce nimic sau introduce date dar nu complet sa afiseze un mesaaj corespunzator?



neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: cronometru

Post by neagu_laurentiu » 23 May 2008, 20:17

Eu nu prea am inteles ce vrei ! Vrei un Sleep(dwMilliseconds) ? Explica mai clar cum se face acea citire !

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: cronometru

Post by neagu_laurentiu » 23 May 2008, 20:41

Despre consola studiaza un pic aici http://msdn.microsoft.com/en-us/library ... S.85).aspx
O alta solutie e sa citesti pe un thread secundar, cel principal il pui in asteptare iar daca au trecut secundele tale sau ai deja caractere citite opresti thread-ul secundar. Se mai gasesc si alte solutii...

Ca de exemplu WaitForSingleObject(hHandle,dwMilliseconds) http://msdn.microsoft.com/en-us/library/ms687032.aspx

viorel2004ro
Membru
Membru
Posts: 67
Joined: 20 Mar 2008, 23:23

Re: cronometru

Post by viorel2004ro » 23 May 2008, 22:50

ok.Solutia cu thread pare interesanta si realizabila.Dar daca nu ar fi existat thread-uri.daca lucrez in Borland C++ 3.1?
e o solutie conform librariilor standard?Thread-ul apartine si de OS.

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: cronometru

Post by neagu_laurentiu » 24 May 2008, 06:30

daca lucrez in Borland C++ 3.1?
Atunci nu mai sunt valabile link-urile mele catre "wait-uri la handle"... Dar mai lucrezi cu sisteme antice ? :wacko:
In MS-DOS ai buffer-ul tastaturii pe la nu stiu ce adresa si poti sa-i introduci fortat un caracter pentru ca functia ta de citire sa iasa din blocaj. Aici nu avem thread-uri dar sunt acele rutine rezidente (TSR, ma faci sa-mi aduc aminte cum am lucrat acum 15 ani :roll: ) prin care poti corupe o intrerupere, sa zicem ceasul, unde-i dai rutina ta care va insera un caracter in buffer-ul tastaturii. Pare complicat dar daca ai facut programare in anii '90-'95 chestiile astea erau la ordinea zilei...
Dar sigur tu lucrezi pe un MS-DOS autentic ? Ca in 99.999(9)% din cazuri se ruleaza programe pe 16 biti in console de 32, adica emulat in Command Prompt si unde chiar MS zicea ca unele chestii low/de finete nu mai sunt asa de compatibile...

viorel2005
Membru
Membru
Posts: 208
Joined: 24 May 2008, 09:41

Re: cronometru

Post by viorel2005 » 24 May 2008, 20:24

merci ptr raspuns.Vroiam sa stiu daca folosind librarile standard exista vreo solutie
sa il poti face cross-platform proiectul.

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: cronometru

Post by neagu_laurentiu » 24 May 2008, 21:52

sa stiu daca folosind librarile standard exista vreo solutie sa il poti face cross-platform
NU, daca folosesti biblioteci implementate de MS / GNU / etc.
DA, daca folosesti biblioteci cross-platform.

Iti dau un exemplu banal in Windows:

Code: Select all

#include <stdio.h>
#include <windows.h>

void main(void)
{
  printf("12345");
  Sleep(3000);
  printf("67890\n");
}
si echivalentul in Linux:

Code: Select all

#include <stdio.h>
#include <unistd.h>

void main(void)
{
  printf("12345");
  sleep(3);
  printf("67890\n");
}
Desi ar trebui sa apara pe ecran 12345 urmat de pauza 3 secunde si in continuare 567890 +salt la linia urmatoare cum se intampla in Windows, in Linux nu vezi nimic pana nu trec 3s apoi vezi direct 1234567890 + salt la linia urmatoare :wacko:
Asta ca sa vezi cross-platform clasic.

Cand ai o biblioteca ce iti expune aceeasi functie dar implementata separat pe fiecare OS de cineva, cu particularitatile si chitibusurile sale, poti face programare cross-platform ok.

viorel2005
Membru
Membru
Posts: 208
Joined: 24 May 2008, 09:41

Re: cronometru

Post by viorel2005 » 25 May 2008, 13:06

care este logica de in linux merge diferit fata de Windows?executia nu este secventiala?

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: cronometru

Post by neagu_laurentiu » 25 May 2008, 14:40

Nu m-am prins nici eu de ce nu merge...
Daca am insa printf("12345\n"); adica ma duc la linia urmatoare si apoi pauza... totul e ok si in Linux !
Cel mai probabil e o problema in consola si afisare pana se trece la randul urmator :wacko:

Post Reply