From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Mon 01 Mar 2004 - 09:13:20 EST
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);
> }
>
>