Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

fltk & ALSA sequencer problem (početnički ;) )

[es] :: C/C++ programiranje :: fltk & ALSA sequencer problem (početnički ;) )

[ Pregleda: 2164 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ŠargarepaMen
Đorđe Golubović
Novi Sad

Član broj: 55142
Poruke: 85
*.ADSL.neobee.net.



Profil

icon fltk & ALSA sequencer problem (početnički ;) )16.09.2005. u 12:18 - pre 226 meseci
Dakle, imam jedno početničko pitanje. Što se tiče mojeg programerskog iskustva, poprilično je traljavo, mada znam neke osnovne stvari. Avaj, trenutno pokušavam da na Linuksu odradim mali program u sa FLTK GUI-jem (fltk verzija 1.1.6) koji prima midi signale sa sekvencera, i ispisuje ih u nekim tekst-boksovima i sl.
Šta sam do sada uradio (naravno, uz pomoć raznih tutoriala i primera sa neta) - napravio sam jednostavan prozorčić u FLUID-u, meni, i dva displeja koja treba da ispisuju podatke o MIDI eventima, imam dva threada - GUI thread i thread koji detektuje midi signale (nisam napomenuo, koristim ALSA sequencer interfejs) i baca ih na gui.
Sada da pređem na problematiku - sve je to fino, uradio sam da ispisuje u konzoli podatke o prihvaćenim MIDI eventima, i tamo stvari teku kako treba... Ali, podaci na fltk prozorčetu se refreshuju SAMO pod uslovom da pomeram kursor miša po površini prozora, ili da pritiskam neke shortcut tastere (shortcut tastere specijalno definisane za navedeni program). Kao očajnički potez, stavio sam da poziva redraw() prozora i svih živih komponenti posle svake promene, ali, logično, ništa se nije desilo, jer je i na početku bilo očito da je u nečemu drugom problem. Ali, kada sam stavio clock widget na prozor ;), prilikom svakog pomeraja kazaljke (znači, svake sekunde), sadržaj se refreshovao. Naravno, ovo je najpatetičniji mogući izgovor za rešenje mojeg problema.
Dakle, ponoviću, služim se threadovima - jedan nacrta fltk prozor, a drugi prima midi signale, i menja displeje na guiju. Oba su poterana iz main() funkcije. Treba mi samo neki savet, pošto me zaista kopka... Kapiram da sam napravio neku bednu grešku, ali prosto nemam ideju šta. Samo da napomenem, fltk je prvi gui toolkit koji sam ikada koristio - do sada sam radio aplikacijice sa čisto tekstualnim ispisom na konzoli.
Hvala unapred!

Jazavac...


 
Odgovor na temu

_VampiR_
Dejan Menges
Sarajevo, BiH

Član broj: 51402
Poruke: 83
217.199.128.*



Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )16.09.2005. u 12:27 - pre 226 meseci
Jesi li pokusao ponovo iscrtati prozor nakon sto mu predas podatke?
:: Don't drink contaminated water - drink beer ::
 
Odgovor na temu

ŠargarepaMen
Đorđe Golubović
Novi Sad

Član broj: 55142
Poruke: 85
*.ADSL.neobee.net.



Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )16.09.2005. u 12:57 - pre 226 meseci
Naravno, to sam i rekao u gore navedenom tekstu. To bi bilo očigledno rešenje problema da nema poznate činjenice - refreshuje se samo kada se pomera miš po prozoru. Znači nešto drugo je u pitanju.


Jazavac...


 
Odgovor na temu

_VampiR_
Dejan Menges
Sarajevo, BiH

Član broj: 51402
Poruke: 83
217.199.128.*



Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )16.09.2005. u 13:01 - pre 226 meseci
Nisam mislio pomocu metoda Redraw(), nego npr. obrisati taj objekat, te ga ponovo kreirati sa zadanim parametrima i prikazati. To bi onda moralo raditi.

Postaj dio koda da vidim.
:: Don't drink contaminated water - drink beer ::
 
Odgovor na temu

ŠargarepaMen
Đorđe Golubović
Novi Sad

Član broj: 55142
Poruke: 85
*.ADSL.neobee.net.



Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )16.09.2005. u 19:29 - pre 226 meseci
Da brišem, pa da crtam? Probaću tako, mada je relativno velik posao za moj slab um.

Evo, staviću nekolicinu funkcija koje imaju veze sa problemom, ali su u realnom životu razbacane na više fajlova, što ne verujem da će biti veliki problem za shvatiti ;)

Prvo, main. Nije preko potrebno, ali
Code:

int main (int argc, char** argv) {

    init_all(); // sequencer.h - inicijalizacija "globalnih" promenljivih
    
    // Ova funkcija kreira dva thread-a - UI thread i MIDI thread
    create_threads(); // sequencer.h

    join_threads(); //sequencer.h - 
    exit(0);
}


Sada, funkcija koja kreira UI thread, a poziva se iz funkcije create_threads() iz main():
Code:

void create_UI_thread() {
    int errcode;
    
    if (errcode = pthread_create(    &UI_thread,
                    NULL,
                    UI_thread_call,
                    &UI_thread_id)) {
        errexit(errcode, "pthread_create: UI_thread"); //makro koji pise poruku na konzolu i izlazi iz programa
    }

}

UI_thread_id i UI_thread su globalne promenljive

definicija funkcije UI_thread_call, pozivane iz create_UI_thread():
Code:

void* UI_thread_call(void* arg) {
    prozorchich = new MIDI_Detektor_UI();
    Fl::visual(FL_DOUBLE|FL_INDEX);
    prozorchich->show();
    while (Fl::run()) { }
    return arg;
}


i konačno, funkcija koja se poziva iz MIDI threada svaki put kada program dobije midi signal:
Code:

void display_event(char* name, int value) {
    prozorchich->eventType->value(name);
    prozorchich->eventValue->value(value);
}


Nadam se da ćeš skapirati nešto iz ovoga, nisam smeo više koda da stavim, haos bih napravio :). Ako je imaš dvoumica oko nekih imena, to su sigurno globalne promenljive, tj globalne na nivou jednog source fajla.

Još ću pokušati da pratim tvoj savet, sa uništavanjem i ponovnim kreiranjem objekta, pa ću javiti, a ti izreci nešto ako primetiš neku glupost u kodu koja bi mogla imati veze sa problemom (znam da ima gomila drugih gluposti koje me trenutno ne kopkaju kao ova ;) ).
I hvala ti za cimanje.

Jazavac...


 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )17.09.2005. u 09:49 - pre 226 meseci
ŠargarepaMen, preporucujem toplo citanje /test/threads.cxx fajla. Nakon citanja ovih parcica koda koji si dao gore pitao sam se kako ti GUI uopste radi! :)
Takodje OBAVEZNO procitaj i ovaj tekst: http://www.fltk.net/f2doc/group__multithreading.html i pokusaj da shvatis sve. Ako ti nesto nije jasno odatle, slobodno mi se mozes javiti i privatno na [email protected] . Alternativno, dodji na irc://irc.eu.freenode.org/FLTK2 .

Ukratko:
- U main() prva linija treba da bude fltk::lock().
- Svako osvezavanje FLTK objekata treba da bude "okruzeno" sa fltk::lock(); /* ovde ide osvezavanje */ fltk::unlock();
- Takodje ces nekada trebati da pozoves fltk::awake() da bi se FLTK-u dalo na znanje da je zavrsen nekakav proces koji zahteva puno vremena i da treba da osvezi GUI. Ova funkcija je bitna SAMO kada se radi sa vise niti! :)
- U glavnoj niti pokreni FLTK-ov main event loop sa dobro-poznatim fltk::run();
- U drugim nitima, kad god zelis da apdejtujes GUI, prvo GA ZAKLJUCAJ sa fltk::lock(); , onda STO BRZE MOZES apdejtuj sve (postavis nove vrednosti za ProgressBar, Input, Browser-e, i slicno) i nakon toga pokreni fltk::unlock() .
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )17.09.2005. u 09:55 - pre 226 meseci
Kasno videh da je u pitanju FLTK 1.x ... Nebitno, sistem je skroz isti, samo umesto fltk:: namespace-a koristis Fl_ :) .
Drugo, moj predlog je da Fl::run() stavis u main() , negde pred kraj main() .

display_event() treba da izgleda ovako otprilike:

Code:

void display_event(char* name, int value) {
  Fl::lock();
  prozorchich->eventType->value(name);
  prozorchich->eventValue->value(value);
  Fl::awake();
  Fl::unlock();
}


Nesto mi mirise da ti ne koristis Fl::awake() , jer u slucaju da se ne koristi Fl::awake(), onda ce FLTK da prikaze ono sto se update-ovalo SAMO kada se desi sledeci GUI dogadjaj! :)))
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

ŠargarepaMen
Đorđe Golubović
Novi Sad

Član broj: 55142
Poruke: 85
*.ADSL.neobee.net.



Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )17.09.2005. u 18:00 - pre 226 meseci
Prosto ne znam šta da kažem... Nije mi palo na pamet da tražim neki tekst o nekim specifičnostima sa fltk multithreading programiranjem, a izgleda da sam trebao da pretpostavim... Hvala ti za informaciju, već sada sve deluje dosta jasnije.
A pogodio si, ne koristim Fl::awake(), i to iz čistog razloga što nisam ni znao za te Fl metode za rad sa threadovima. :)
Hvala još jednom, a ja sada idem da proučavam štivo, i popravljam kod!

Jazavac...


 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )17.09.2005. u 19:50 - pre 226 meseci
Ja bih te samo zamolio da, kada tvoj projekat bude dostigao nekakvu stabilnu fazu, ili kada vec imas nekakav sajt za njega (ako nemas i tu mogu da pomognem), odes na http://www.fltk.org/links.php i registrujes svoj projekat. :) Ubaci informaciju u odgovarajucu kategoriju. Srecno sa projektom.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

ŠargarepaMen
Đorđe Golubović
Novi Sad

Član broj: 55142
Poruke: 85
*.ADSL.neobee.net.



Profil

icon Re: fltk & ALSA sequencer problem (početnički ;) )18.09.2005. u 21:59 - pre 226 meseci
E, hvala ti na svemu. Rado ću registrovati projekat, mada za sada neće biti ništa više nego, recimo, igračkica za upoznavanje sa ALSA sequencer API-jem i fltk-om. :) Projekat se bliži nekoj stabilnoj fazi (mada nije ni blizu gotovog), pa ću videti šta ću dalje.

Jazavac...


 
Odgovor na temu

[es] :: C/C++ programiranje :: fltk & ALSA sequencer problem (početnički ;) )

[ Pregleda: 2164 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.