Article View: pl.comp.os.linux.programowanie
Article #60547Asynchroniczna komunikacja pomiędzy aplikacjami w Linuksie.
From: borneq
Date: Sun, 20 Nov 2005 14:38
Date: Sun, 20 Nov 2005 14:38
29 lines
2666 bytes
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-mailShow 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