comp.lang.ada
 help / color / mirror / Atom feed
From: DrPi <314@drpi.fr>
Subject: Re: In memory Stream
Date: Sat, 17 Feb 2024 15:56:34 +0100	[thread overview]
Message-ID: <uqqhf3$orp$2@rasp.pasdenom.info> (raw)
In-Reply-To: <uqqfr4$eokb$1@dont-email.me>

Le 17/02/2024 à 15:28, Dmitry A. Kazakov a écrit :
> On 2024-02-17 14:36, DrPi wrote:
> 
>> Concerning the OS and the buffer transfert mechanism, as I said, this 
>> is under control. I use Windows and the WM_COPYDATA message.
>>
>> My usage is a bit special. The writing process writes a bunch of data 
>> in a memory buffer then requests this buffer to be transferred to 
>> another process by way of WM_COPYDATA. The receiving process reads the 
>> data from the "new" memory buffer. I say "new" since the address is 
>> different from the one used in the writing process (of course it can 
>> not be the same).
> 
> You ask Windows to copy a chunk of memory from one process space into 
> another, so yes it is physically different memory. Different or same 
> address tells nothing because under Windows System.Address is virtual 
> and can point anywhere.
> 
> As you may guess it is a quite heavy overhead, not only because of 
> copying data between process spaces, but also because of sending and 
> dispatching Windows messages.
> 
> Note, that if you implement stream Read/Write as individual Windows 
> messages it will become extremely slow. GNAT optimizes streaming of some 
> built-in objects, e.g. String. But as a general case you should expect 
> that streaming of any non-scalar object would cause multiple calls to 
> Read/Write and thus multiple individual Windows messages.
> 
> An efficient way to exchange data under Windows is a file mapping. See 
> CreateFileMapping and MapViewOfFile.
> 
> 
> https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfilemappinga
> 
> 
> https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-mapviewoffile
> 
> Then use CreateEvent with a name to signal states of the stream buffer 
> system-wide. Named Windows events are shared between processes.
> 
> 
> https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createeventa
> 
> [ This is how interprocess stream is implemented for Windows in Simple 
> Components ]
> 
In my use case, there is no performance problem.
The purpose is to make an editor simple instance. When you launch the 
editor the first time, everything is done as usual. Next time you launch 
the editor (for example by double clicking on a file in file explorer) 
the init code of the editor detects an instance of the editor is already 
running, transfers the command line arguments to the first instance and 
exit.
The buffer transfert occurs once when starting a new instance of the editor.

However, I keep your solution in mind. I might need it one day.
Thanks.

  reply	other threads:[~2024-02-17 14:56 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-16  9:41 In memory Stream DrPi
2024-02-16 10:40 ` J-P. Rosen
2024-02-16 12:40 ` Dmitry A. Kazakov
2024-02-16 12:49 ` Pascal Obry
2024-02-16 20:19 ` Simon Wright
2024-02-16 21:54 ` Lawrence D'Oliveiro
2024-02-17  9:19   ` Dmitry A. Kazakov
2024-02-17 22:00     ` Lawrence D'Oliveiro
2024-02-18 10:06       ` Dmitry A. Kazakov
2024-02-17 13:36 ` DrPi
2024-02-17 14:26   ` J-P. Rosen
2024-02-17 14:42     ` DrPi
2024-02-17 18:52       ` J-P. Rosen
2024-02-18  0:02       ` Lawrence D'Oliveiro
2024-02-17 14:48     ` Dmitry A. Kazakov
2024-02-17 14:28   ` Dmitry A. Kazakov
2024-02-17 14:56     ` DrPi [this message]
2024-02-17 18:09     ` Simon Wright
2024-02-17 21:33       ` Dmitry A. Kazakov
2024-02-18 10:06         ` Simon Wright
2024-02-18 13:02           ` Dmitry A. Kazakov
2024-02-18 20:58             ` Lawrence D'Oliveiro
2024-02-18 22:10               ` Dmitry A. Kazakov
2024-02-18 23:44                 ` Lawrence D'Oliveiro
2024-02-19  8:32                   ` Dmitry A. Kazakov
2024-02-20  0:41                     ` Lawrence D'Oliveiro
2024-02-20  8:55                       ` Dmitry A. Kazakov
2024-02-20 19:37                         ` Lawrence D'Oliveiro
2024-02-20 20:45                           ` Dmitry A. Kazakov
2024-02-20 22:32                             ` Lawrence D'Oliveiro
2024-02-21  7:43                               ` Dmitry A. Kazakov
2024-02-21 19:44                                 ` Lawrence D'Oliveiro
2024-02-22  8:54                                   ` Dmitry A. Kazakov
2024-02-22 19:53                                     ` Lawrence D'Oliveiro
2024-03-25 11:07                                       ` Nioclásán Caileán Glostéir
2024-03-25 21:21                                         ` Lawrence D'Oliveiro
2024-02-18  0:00   ` Lawrence D'Oliveiro
2024-02-18 10:06     ` Dmitry A. Kazakov
2024-02-18 20:56       ` Lawrence D'Oliveiro
2024-02-18 22:10         ` Dmitry A. Kazakov
2024-02-18 23:47           ` Lawrence D'Oliveiro
2024-02-19  8:39             ` Dmitry A. Kazakov
2024-02-20  0:43               ` Lawrence D'Oliveiro
2024-02-19  9:24         ` Björn Lundin
2024-02-19  9:46           ` Dmitry A. Kazakov
2024-02-20  0:42             ` Lawrence D'Oliveiro
2024-04-02  0:21               ` Kevin Chadwick
2024-04-02  0:27                 ` Lawrence D'Oliveiro
2024-04-02  3:27                   ` Kevin Chadwick
2024-04-03 19:43                     ` Pól Niocláſ Caileán Gloſtéir
2024-04-03 22:44                       ` Chris Townley
2024-02-18 11:36     ` Björn Lundin
2024-02-18 20:57       ` Lawrence D'Oliveiro
2024-02-19 14:59         ` Björn Lundin
2024-02-19 17:01           ` Chris Townley
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox