Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 kwi 2024, o 12:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 13 lip 2012, o 00:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Chyba głąb ze mnie nieziemski, ale jakoś nie mogę pojąć zdarzeń :(
Na początek chciałbym zrobić coś prostego - obsługę klawiszy. Wyklepałem sobie takie "cóś":
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

oraz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I teraz jak tego użyć w main.c ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lip 2012, o 06:47 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Myślę, że na razie twój największy kłopot to jest ze zrozumieniem "funkcji typu callback" zgadza się ? nie za bardzo wiesz o co w tym chodzi - zresztą widać to po tym kodzie, zatem spróbuję to na początek przybliżyć.

1. funkcje callback to funkcje zwrotne - co to oznacza? Ni mniej ni więcej tylko to, że jak piszesz komuś np jakiejś drugiej osobie jakąś funkcję do obsługi klawiatury - wszystko super. No ale ta osoba chciałaby mieć możliwość wykonywania własnej funkcji gdy zostanie naciśnięty jakikolwiek klawisz (bo np chce zliczać ilość naciśnięć klawiszy) ... to jak to zrobisz ???? A przecież nie możesz pozwolić na to żeby ta osoba grzebała w twojej bibliotece do obsługi klawiatury.

2. mówisz więc tej osobie, "słuchaj zrobię ci tą bibliotekę" ale żebyś mi nie mieszał w niej to umożliwię ci to żeby ta moja bibblioteka wywoływała jakąś jedną twoją funkcję, którą sam sobie napiszesz. Może to być dowolna funkcja i mnie nie obchodzi co w niej będzie ;)

3. w związku z powyższym musisz tej osobie przekazać jeszcze jakąś możliwość dzięki, której ta twoja biblioteka dowie się w późniejszym czasie, gdy osobnik ten otrzyma bibliotekę, - możliwość ta to właśnie jakaś jedna dodatkowa funkcja, pozwalająca na zarejestrowanie na potrzeby tej biblioteki funkcji użytkownika

4. zatem po napisaniu swojej bibloteki przygotujemy funkcję typu register_my_func( ); której argumentem będzie wskaźnik na przyszłą funkcję tej osoby, i podamy jej instrukcję jak ma tego używać.

5. napiszesz więc, do tej osoby maila i poinformujesz, że:

a.) zanim zaczniesz myśleć o korzystaniu z mojej biblioteki stwórz w kodzie swoją własną funkcję do zliczania kliknięć np

Kod:
     void klik( void );


b.) gdy już ją będziesz miał to zanim użyjesz funkcji mojej biblioteki - jeszcze przed pętlą główną, zarejestruj tą swoją funkcję na potrzeby mojej biblioteki, masz w tym celu ode mnie dodatkową funkcję o nazwie register_my_func( );, zrób to tak

Kod:
    register_my_func( klik );


c.) dopiero po tej operacji możesz w pętli głównej korzystać z mojej biblioteki i mieć pewność, że gdy wykryje ona wciśnięcie jakiegokolwiek klawisza to wywoła twoją własną funckję, którą zarejestrowałeś jak wyżej

d.) co by się stało gdybyś zapomniał zarejestrować swojej funkcji i jej w ogóle nie stworzył a wywołał moją bibliotekę ? NIC BY SIĘ NIE STAŁO - ponieważ ja w kodzie bibliooteki sprawdzam to czy dokonałeś rejestracji - jeśli nie to nie zostanie wywołana żadna funkcja ;) więc śpij spokojnie - a oczywiście cała reszta biblioteki będzie działać nadal poprawnie. Sprawdzenie czy zarejestrowałeś swoją funkcję u mnie wygląda tak:

Kod:
   if( user_callback ) user_callback; // jeśli wskaźnik do funkcji użytkownika nie jest pusty to wywołaj tę funkcję


---------------------------------

dobra koniec wyjaśnień - tymczasem ty w tym kodzie, który pokazałeś, no właśnie co? sprawdziłeś czy jest zarejestrowana jakaś funkcja i ją próbujesz wywołać

Kod:
if (keyb_event_callback) (*keyb_event_callback)();


ale gdzie masz tą własną funkcję i jej rejestrację ??? zostało tylko to:

Kod:
register_keyb_event_callback(...?...);


czyli napisz własną funkcję i ją właśnie zarejestruj w tym nawiasie w miejscu tego znaku zapytania ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lip 2012, o 11:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

OK. Czyli jak ta osoba nie będzie chciała używać własnej funkcji to:
1) nie rejestruje jej (bo nie ma czego rejestrować),
2) w pętli głównej wywołuje tylko funkcję KEYB_IVENT
i to wszystko?

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lip 2012, o 13:02 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Dokładniuśko TAK ;)

Wtedy robisz sobie zdarzenie bez funkcji zwrotnej dla usera ale na takich samych zasadach

czyli możesz w ogóle ze swojej biblioteki wywalić funkcję do rejestracji i tego IF'a sprawdzającego callbacka

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2012, o 19:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

DO SKASOWANIA :twisted:

_________________
Czekamy na RedBook'a!



Ostatnio edytowano 18 lip 2012, o 20:59 przez szopler, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2012, o 19:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

No zagadki to już bardziej się nadają albo do "Działu Rybnego" albo do "Łamigłówek" - ja nie za bardzo mam czas na zagadki ;) Mogę pomóc ale w konkretnych i jasno sprecyzowanych problemach/pytaniach

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO