comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: In memory Stream
Date: Sat, 17 Feb 2024 15:28:54 +0100	[thread overview]
Message-ID: <uqqfr4$eokb$1@dont-email.me> (raw)
In-Reply-To: <uqqcpf$orp$1@rasp.pasdenom.info>

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 ]

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  parent reply	other threads:[~2024-02-17 14:28 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 [this message]
2024-02-17 14:56     ` DrPi
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