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 |
Aplicatie in C, win32api, threads.
Last Updated: Feb 25 2018 04:22, Started by
Bumble71
, Feb 24 2018 12:48
·
0
#1
Posted 24 February 2018 - 12:48
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
Posted 24 February 2018 - 13:01
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
Posted 24 February 2018 - 13:04
#4
Posted 24 February 2018 - 13:04
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
Posted 24 February 2018 - 13:09
OriginalCopy, 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. |
#6
Posted 24 February 2018 - 13:14
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
Posted 24 February 2018 - 13:14
dani.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. |
#8
Posted 24 February 2018 - 13:14
Bumble71, 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. 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
Posted 24 February 2018 - 13:21
#10
Posted 24 February 2018 - 13:27
Ce am scris precedent nu e opus cu ce a scris tavitu, e complementar.
|
|
#11
Posted 24 February 2018 - 13:35
#13
Posted 24 February 2018 - 13:48
dani.user, on 24 februarie 2018 - 13:37, said:
Grija la XY Problem Ma rog, din propriile greseli se invata mai bine decat din greselile altora |
#14
Posted 25 February 2018 - 04:22
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users