Op 13-5-2012 19:51, Till Oliver Knoll schreef:
> Am 13.05.2012 um 18:36 schrieb Till Oliver Knoll<till.oliver.kn...@gmail.com>:
>
>> Hello,
>>
>> this seems to be an ever recurring topic: How does one get notified in a 
>> *child* process (started via QProcess) once there is data to be read on 
>> stdin (in a platform-independent matter - but for now mostly OS X)?
> I came to realise that stdin/out are really *text*-based and trying to 
> re-open them in binary mode is also not guaranteed to work everywhere:
>
> http://bytes.com/topic/c/answers/213649-how-write-binary-data-stdout
>
> As I really want to send raw JPEG binary data from parent to child this IPC 
> solution is a dead-end anyway.
>
>
> Next: QLocalServer/Socket. I assume in the parent process I start a 
> QLocalServer, start a child process via QProcess and pass along the "server 
> connect information" as arguments, and then in the child process connect to 
> the parent process' server. That should hopefully give me a bi-directional 
> (local socket or pipe) connection with "bytesAvailable" signals on both ends.
>
> It remains to be seen whether the parent process with *no* network 
> entitlement ("OS X sandboxing") can actually create a local server...
>
> If that would fail, what remains is QSharedMemory. But to my understanding 
> that would require to "poll some memory addresses" wheter the other process 
> wants to "send a message". Not to mention that I need to send data of 
> variable size (JPEG), so I would probably end up in a "memory-based block 
> read/write protocol": "I have written 1024 KBytes of JPEG data into the 
> shared memory block, more to follow (poll for ACK) - Ok, got it (poll for 
> more data) - Here is the next block of 1024 KBytes - Ok, bring it on... - 
> Here are the last 42 KBytes - Got it..." doh!
>
> I hope the local socket approach works...
>
How about using QSharedMemory for the actual JPEG data, and use either 
the QLocalServer/Socket or a StdIn/StdOut approach for the notifications 
that there is something to read? Seems more efficient than (de-) 
serializing images all the time. You could even use something like 
QxtRPCPeer[1] for the communication between the two programs.

André

[1] http://libqxt.bitbucket.org/doc/0.6/qxtrpcpeer.html#details

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to