From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 41A517EEAF for ; Thu, 31 Jan 2013 10:53:34 +0100 (CET) Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of mfp@acm.org) identity=pra; client-ip=213.4.138.18; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="ferferse@telefonica.net"; x-sender="mfp@acm.org"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of ferferse@telefonica.net designates 213.4.138.18 as permitted sender) identity=mailfrom; client-ip=213.4.138.18; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="ferferse@telefonica.net"; x-sender="ferferse@telefonica.net"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of postmaster@telefonica.net designates 213.4.138.18 as permitted sender) identity=helo; client-ip=213.4.138.18; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="ferferse@telefonica.net"; x-sender="postmaster@telefonica.net"; x-conformance=sidf_compatible; x-record-type="v=spf1" X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkoBAGQ+ClHVBIoSi2dsb2JhbABFvzYOAQEBCgsLBxIGI4IeAQEFJxNPCxgJJQ8FKE+HesIHjWOCSGEDlhEBk0Q X-IPAS-Result: AkoBAGQ+ClHVBIoSi2dsb2JhbABFvzYOAQEBCgsLBxIGI4IeAQEFJxNPCxgJJQ8FKE+HesIHjWOCSGEDlhEBk0Q X-IronPort-AV: E=Sophos;i="4.84,575,1355094000"; d="scan'208";a="786158" Received: from impaqm2.telefonica.net (HELO telefonica.net) ([213.4.138.18]) by mail2-smtp-roc.national.inria.fr with ESMTP; 31 Jan 2013 10:53:33 +0100 Received: from IMPmailhost1.adm.correo ([10.20.102.38]) by IMPaqm2.telefonica.net with bizsmtp id uYXc1k00m0piX6q3NZtZUX; Thu, 31 Jan 2013 10:53:33 +0100 Received: from NANA.localdomain ([95.122.129.253]) by IMPmailhost1.adm.correo with BIZ IMP id uZtX1k00o5UANXz1hZtYkr; Thu, 31 Jan 2013 10:53:32 +0100 X-CMAE-Analysis: v=1.1 cv=8z4mVNkgHKLw40hQy/fAEIvQy1KghtMuD2tMRNZbokg= c=1 sm=1 a=QlAfbifRM1EA:10 a=yHPWnCFF9UAA:10 a=kWQ6D_09QQAA:10 a=j7uayGIntX4A:10 a=kj9zAlcOel0A:10 a=Dc2wY6T36DIlBk+Oc755yQ==:17 a=pK7lCOFv-aW_6liLHhkA:9 a=CjuIK1q_8ugA:10 a=Dc2wY6T36DIlBk+Oc755yQ==:117 X-original-sender: ferferse@telefonica.net Received: from mfp by NANA.localdomain with local (Exim 4.77) (envelope-from ) id 1U0qpn-0008LC-Ea for caml-list@inria.fr; Thu, 31 Jan 2013 10:53:31 +0100 Date: Thu, 31 Jan 2013 10:53:31 +0100 From: Mauricio Fernandez To: caml-list@inria.fr Message-ID: <20130131095331.GA3017@NANA.localdomain> Mail-Followup-To: caml-list@inria.fr References: <87622dx692.fsf@golf.niidar.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87622dx692.fsf@golf.niidar.ru> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) Subject: Re: [Caml-list] [lwt] multiplexing several threads On Thu, Jan 31, 2013 at 09:37:29AM +0400, Ivan Gotovchits wrote: > The following solution > > let rec loop sc = > let cmd = read_from_user () read_event () in > cmd >>= (process state) > > and process sc = function > | Exit -> return sc > | cmd -> (* modify sc*) loop sc > > let r = Lwt_main.run (loop state) > > doesn't work when the event thread wakes up first. In that case the next > step of the loop will call Lwt_read_line.read_line before the previous > invocation finishes and it breaks user input. > > Please, help me to find a feasible solution to my problem! let process s = function Exit -> return (`Exit s) | cmd -> let s = ... in return (`State s) let rec loop state user_cmd event = match_lwt Lwt.choose [ (lwt x = user_cmd in return (`User x)); (lwt x = event in return (`Event x)); ] with `User cmd -> begin match_lwt process state cmd with `Exit s -> return s | `State s -> loop s (read_from_user ()) event end | `Event cmd -> begin match_lwt process state cmd with `Exit s -> return s | `State s -> loop s user_cmd (read_event ()) end -- Mauricio Fernandez