Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Boxa membrana tweeter infundata

ajutor

Whisky for Mac

Xiaomi 14 Gpay
 Izolare zid exterior de scandura

Dezinstalare drivere W11 23H3

Recomandare masina de spalat fiab...

BSOD din cauza Intel Audio DSP dr...
 De ce sunt oamenii nostalgici

Cum vand casa fara factura Hidroe...

Scor FICO minim

Tonometru compensat CAS?
 polita RCA ONLINE

Termostat frigider - verificare

Mai au PC-urile vreun viitor?

Centrala termica immergas
 

Aplicatie in C, win32api, threads.

- - - - -
  • Please log in to reply
13 replies to this topic

#1
Bumble71

Bumble71

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 24.02.2018
Salut,

In incercarea de a dezvolta o aplicatie simpla in C utilizand win32api m-am izbit de o problema din punctul meu de vedere.
Am doua thread-uri. Intr-un thread preiau mesaje de pe USB si le introduc intr-o coada. Iar in cel de-al doilea preiau mesajele din coada si le afisez intr-o consola.
Problema este ca cel de-al doilea thread nu reuseste sa le afiseze intr-un timp cat mai optim deoarece mesajele vin foarte repede, iar in bucla infinita din thread am introdus un sleep de 1ms pentru nu ridica CPU load-ul calculatorului la 20 %.

Cum a putea face acea afisare de mesaje intr-un mod cat mai rapid?

Mersi!

#2
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
stdout/stderr sunt line-buffered cand sunt atasate unei console, cand nu, sunt fully buffered - cel putin asa e in Linux, dar suspectez ca e similar in Windows.

In Linux, doar daca te uiti la terminal in timp ce programul lucreaza, incetinesti programul de vreo 50 de ori (bazat pe un experiment pe care l-am facut acum 9 ani).

Deci: incearca sa redirectionezi outputul catre fisiere, sau sa folosesti setbuffer.

#3
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostBumble71, on 24 februarie 2018 - 12:48, said:

Cum a putea face acea afisare de mesaje intr-un mod cat mai rapid?
Dincolo de raspunsul punctual la intrebare: textul in general nu e bun pentru afisarea rapida de informatii, mai eficient e sa desenezi statistici. Textul e bun la alte lucruri.

#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Afisarea in consola e lenta (considerabil mai lenta decat sub Linux, dupa observatiile mele).

Bucla aceea infinita ce rol are? WinAPI iti pune la dispozitie diverse mecanisme pentru a anunta cand ceva e disponibil, rar e nevoie de pooling.

#5
Bumble71

Bumble71

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 24.02.2018

View PostOriginalCopy, on 24 februarie 2018 - 13:01, said:

stdout/stderr sunt line-buffered cand sunt atasate unei console, cand nu, sunt fully buffered - cel putin asa e in Linux, dar suspectez ca e similar in Windows.

In Linux, doar daca te uiti la terminal in timp ce programul lucreaza, incetinesti programul de vreo 50 de ori (bazat pe un experiment pe care l-am facut acum 9 ani).

Deci: incearca sa redirectionezi outputul catre fisiere, sau sa folosesti setbuffer.
Am facut chestia asta si catre un fisier si este totul ok, dar m-ar interesa si un mod in care sa le vizualizez in aplicatie.

#6
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Presupunând că accesul la coadă este deja protejat de un mechanism de sincronizare.

https://msdn.microso...s686946(v=vs.85).aspx
sau
https://msdn.microso...s686915(v=vs.85).aspx

Thread-ul care afișează mesajele în consolă așteaptă ca EventObject/Semaphore să fie "signaled" în bucla infinită. Thread-ul care citește mesajele de pe USB, după ce pune un mesaj în coadă, face ca EventObject/Semaphore să fie "signaled".

#7
Bumble71

Bumble71

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 24.02.2018

View Postdani.user, on 24 februarie 2018 - 13:04, said:

Afisarea in consola e lenta (considerabil mai lenta decat sub Linux, dupa observatiile mele).

Bucla aceea infinita ce rol are? WinAPI iti pune la dispozitie diverse mecanisme pentru a anunta cand ceva e disponibil, rar e nevoie de pooling.
As vrea cumva sa scap de acea bucla infinita, si m-ar interesa aceste mecanisme prin care sa ma anunte cand ceva este disponibil. Ma poti ajuta cu niste informatii cu privire la aceste mecanisme, un link ?

#8
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostBumble71, on 24 februarie 2018 - 13:09, said:

Am facut chestia asta si catre un fisier si este totul ok, dar m-ar interesa si un mod in care sa le vizualizez in aplicatie.
Gandeste-te profund la problema pe care incerci sa o rezolvi in termeni de business: ce valoare (bani) produce aceasta afisare ca text? Chiar produce bani?

Ma indoiesc.

Eu as face aceste lucruri concomitent:

1. as loga toate informatiile (pe care tu vrei sa le afisezi), linie cu linie, intr-o baza de date; a avea o baza de date in C e simplu cu sqlite3; asta rezolva problema debuggingului.
2. as afisa informatii agregate in consola, informatii cu adevarat utile: de exemplu sume de numere, medii, mediane, varianta, outliers, etc. Prin faptul ca agreghezi, rata de output va fi mai mica
3. daca chiar vrei musai afisare, poti oricand sa implementezi in program un browser pentru datele din baza de date
4. as afisa grafice pe care le-as updata permanent, si la mouse over pe grafic as afisa detaliile corespunzatoare din baza de date

Nu te intereseaza sa ai o gramada de informatii vizibile concomitent in integralitate, pentru ca te ineci in atatea informatii si intelegi mult mai greu ce se intampla de fapt.

Vrei sa faci informatiile utile, cu optiunea de "drilling in" oricand.

Edited by OriginalCopy, 24 February 2018 - 13:19.


#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007

View PostBumble71, on 24 februarie 2018 - 13:14, said:

Ma poti ajuta cu niste informatii cu privire la aceste mecanisme, un link ?

A pus tavitu link spre ele. Scrii de mana partea din final ca e bug in forum si pare trunchiat linkul.

#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Ce am scris precedent nu e opus cu ce a scris tavitu, e complementar.

#11
Bumble71

Bumble71

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 24.02.2018

View PostOriginalCopy, on 24 februarie 2018 - 13:27, said:

Ce am scris precedent nu e opus cu ce a scris tavitu, e complementar.
Am inteles ce ai vrut sa spui, dar deja m-as duce prea departe cu ceia ce mi-am propus. :D

#12
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Grija la XY Problem

#13
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postdani.user, on 24 februarie 2018 - 13:37, said:

Grija la XY Problem
Daca afisarea e o problema, va ajunge la ce am spus initial oricum: buffering. Doar ca, daca face "buffering" via o baza de date, celelalte probleme sunt mai usor de rezolvat si solutiile mai elegante.

Ma rog, din propriile greseli se invata mai bine decat din greselile altora :D

#14
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

View PostBumble71, on 24 februarie 2018 - 12:48, said:

Cum a putea face acea afisare de mesaje intr-un mod cat mai rapid?
Mersi!
Fa buffering catre o baza de date si de acolo citestele prin celelalt thread

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate