🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #60547

Asynchroniczna komunikacja pomiędzy aplikacjami w Linuksie.

#60547
From: borneq
Date: Sun, 20 Nov 2005 14:38
29 lines
2666 bytes
(zwłaszcza w Kylixie)
Mój problem:
Chcę dopuszczać tylko jedną instancję edytora. Drugie uruchomienie sprawdza,
czy już jest uruchomiony i przesyła parametry. Używam pamięci dzielonej.
Problemem jest wysłanie komunikatu z drugiej instancji do pierwszej w
Linuxie
W Windows można wysłać komunikat używając SendMessage
SendMessage(Handle_other_app,WM_Async_Notification,0,0)
gdzie WM_Async_Notification := RegisterWindowMessage(UNIQE_STRING)
W Qt jest co prawda QApplication_sendEvent, ale pierwszy parametr to nie
unikalne w systemie handle ale obiekt, więc wskaźnik na pamięć procesu.
W książce Kylix Czarna księga (Taylor,Mischel,Gentry) do wysyłania jest
uzywane msgsnd do kolejki komunikatów (ok). Odbierane są cyklicznie w
OnTimer używając msgrcv.
Jak msgrcv wołać asynchronicznie, kiedy pojawi się komunikat?
Moze zastosować sygnały?
Może użyć wątków ale sprawdzanie w pętli czy jest coś w kolejce jest
procesożerne
Lepsza byłaby funkcja blokująca wątek aż coś sie pojawi w kolejce.
Istnieje taka funkcja czy może jest możliwe ustawienie flag msgrcv?
Z wątkami wiąże się też problem (chociaż pomijalny w przypadku przesyłania
parametrów do edytora) wolnej reakcji w porównaniu do windowsowego
SendMessage - trzeba czekać kilkadziesiąt milisekund aż system przestawi się
z programu wysyłającego do wątku sprawdzającego kolejkę.
Jeżeli w wątku w pętli trzeba by sprawdzać nieblokujące msgrcv, wtedy już
lepiej użyć szybkiego (np. 10 ms) timera. Czy  jest jakieś lepsze
rozwiązanie?
Czy można zdarzenie "niepusta kolejka" ustawić podobnie jak ustawia się
timer?
Technical Details
Message-ID: <dlq1q3$rau$1@nemesis.news.tpi.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: "borneq" <no@spam.pl>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Asynchroniczna komunikacja pomiędzy aplikacjami w
 Linuksie.
Date: Sun, 20 Nov 2005 15:38:10 +0100
Organization: tp.internet - http://www.tpi.pl/
Lines: 31
Message-ID: <dlq1q3$rau$1@nemesis.news.tpi.pl>
NNTP-Posting-Host: dpr212.neoplus.adsl.tpnet.pl
X-Trace: nemesis.news.tpi.pl 1132497539 27998 83.24.151.212 (20 Nov 2005 14:38:59 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Sun, 20 Nov 2005 14:38:59 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
X-Antivirus: avast! (VPS 0546-5, 2005-11-20), Outbound message
X-Antivirus-Status: Clean
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit