Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-02-05 19:28:29

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

[c] Pętla while i 100% użycia CPU

Piszę mały program w języku C który odbiera dane z portu ttys0i wyświetla w konsoli przez printf

wygląda mniej więcej tak

Kod:

main()
{
        while(1)
        {
             get_from_com();
             wyswietl();
         }
}

lecz po uruchomieniu go użycie procesowa idzie w 100% , co prawda mogę użyć usleep(10) ,ale kiedy wpływa to na "upuszczanie" danych napływających z portu ttys0 , jak temu zapobiedz ?

Offline

 

#2  2012-02-05 20:03:06

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: [c] Pętla while i 100% użycia CPU

W pradawnych czasach używano do tego buforka. Robisz buforek na dane, odpowiednio duży i dobierasz do tego czas uśpienia wątku.

W dzisiejszych czasach raczej mamy specjalne interfejsy do usypiania, a aktywujące się na dane zdarzenie - najczęściej zwane przerwaniem (w średniowieczu). Pewnie używasz jakiegoś socketu czy coś. To powinno Cię zainteresować pollowanie, selecty i takie tam.

http://linux.die.net/man/2/poll
http://linux.die.net/man/2/select


Inny pomysł to użycie funkcji blokującej wątek, tj. Twoje get_from_com() winno blokować wątek. Raczej nie sądzę by ciągły przepływ danych w tym wątku powodował zużycie procesora, więc pewnie zużywa do nic nie robienie.


Stronka-dom: http://titek.victorygames.pl
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#3  2012-02-06 18:15:05

  qluk - Pan inż. Cyc

qluk
Pan inż. Cyc
Skąd: Katowice
Zarejestrowany: 2006-05-22

Re: [c] Pętla while i 100% użycia CPU

O lol jaki kod :D

ogólnie konstrukcje typu while(1) {} to się stosuje do róznego rodzaju "idlerów" na niskim priorytecie, albo do stres testu. Można też na tym liczniki i "delay" zrobić.

Offline

 

#4  2012-02-06 18:43:30

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: [c] Pętla while i 100% użycia CPU

W zasadzie.... A czy czasem nie wystarczy Ci program "picocom". Np.

Kod:

picocom -b 115200 /dev/ttyS0

To działa naprawdę wyśmienicie (wyjście to: CTRL+A+X)


Stronka-dom: http://titek.victorygames.pl
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#5  2012-02-09 11:11:19

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

Re: [c] Pętla while i 100% użycia CPU

Niestety nie ,ponieważ rozwijam swój program w innym kierunku

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)