[linux-programlama] Re: Aynı anda iki iºlem kontrol etmek

---------

From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Mon 01 Mar 2004 - 09:13:20 EST

  • Next message: Fuat Altun: "[linux-programlama] Re: tablo tasarımı(konu disi)"

    Selamlar..

    Tipik bir thread'in ne oldugunu bilmiyorum sorusu :)

    Size gerekli olan multi-thread calisan bir program temelde ama bu is ha
    denince olacak cinsten degildir. En guzeli Asenkron calismanin
    dayanilmaz hafifligine muracaat etmek olacaktir.

    Mesela basit yoldan:

    void lcd_update(int param) {

         /* LCD'yi update icin gerekenleri buraya yazin */

    . return;
    }

    int main() {

    . signal(SIGALARM, lcd_update);
    . alarm(1);
    . while (1) {

    . /* Seri portu yazin okuyun vs. */
    . /* Her saniyede 1 kere lcd_update otomatikman calisacak */
    . }
    }

    Ama, aslen sizin icin daha iyi olacak olan islem, Seri portu asenkron
    calistirmaktir. pthread_create gibi fonksiyonlarla iki thread olusturmak
    son derece guzel olur. Daha pratik yoldan fcntl(.... FASYNC) ile seri
    portu asenkron surer, fcntl(.... FSETOWN, getpid()) ile async read ve
    write islerini asenkron handlere birakabilirsiniz.

    Bu fonksiyonlari vs. biraz kurcalayin, gerekirse adim adim bu yontemleri
    her birlikte inceleriz belki, vaktimiz ve de aklimiz yeterse..

    Saygi ve sevgiler..

    > Merhabalar,,,
    >
    >
    >
    > Benim yapmak istediğim seri porta bağlı olan barkod okuyucuyu sürekli kontrol ederken kullandığım kod aşağıda ve ben bu arada da lcd ye saati bastırmak istiyorum ama nasıl.. fork ile ilgili bilgim yok biraz ip ucu verirseniz mutlu olurum.
    >
    > şimdiden teşekkürler
    >
    > işte kod:
    > while (1)
    > {
    > fd = open_port ();
    > bufptr = buffer;
    > while ((nbytes =
    > read (fd, bufptr,
    > buffer + sizeof (buffer) - bufptr - 1)) > 0)
    > {
    > bufptr += nbytes;
    > if (bufptr[-1] == '\n' || bufptr[-1] == '\r')
    > close (fd);
    > break;
    > }
    > barkod = strtok (buffer, "P");
    > sprintf (line, "AA%s%5.5s\n", gettime (), barkod);
    > printf ("%s", line);
    > dosya = fopen ("barkod.db", "at");
    > fprintf (dosya, line);
    > fclose (dosya);
    > sprintf (line, " Kroman Celik~Barkod :%5.5s", barkod);
    > lcd_yaz (line);
    > }
    >
    >


  • Next message: Fuat Altun: "[linux-programlama] Re: tablo tasarımı(konu disi)"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.