我的目标是将数据从C++进程传递到Java进程,然后再返回结果.
我通过命名管道实现了这一点,但我更愿意共享数据而不是传递或复制它,假设访问速度更快.
最初,我想过在C++中创建一个可以用Java编写和读取的共享段,但我不确定这是否可以通过JNI实现,更不用说安全了.
我相信在Java中可以使用ByteBuffer.allocateDirect分配内存,然后使用GetDirectBufferAddress来访问C++中的地址,但是如果我是正确的,这是针对JNI中的本机调用,我无法在C++进程中获取此地址?
丢失.
提前谢谢了.
我有以下简化的 IO 完成端口服务器 C++ 代码:
int main(..)
{
startCompletionPortThreadProc();
// Await client connection
sockaddr_in clientAddress;
int clientAddressSize = sizeof( clientAddress );
SOCKET acceptSocket = WSAAccept( serverSocket, (SOCKADDR*)&clientAddress, &clientAddressSize, NULL, NULL);
// Connected
CreateIoCompletionPort( (HANDLE)acceptSocket, completionPort, 0, 0 );
// Issue initial read
read( acceptSocket );
}
DWORD WINAPI completionPortThreadProc( LPVOID param )
{
DWORD bytesTransferred = 0;
ULONG_PTR completionKey = NULL;
LPPER_IO_DATA perIoData = NULL;
while( GetQueuedCompletionStatus( completionPort, &bytesTransferred, &completionKey, (LPOVERLAPPED*)&perIoData, INFINITE ) )
{
if( WaitForSingleObject( exitEvent, 0 ) …Run Code Online (Sandbox Code Playgroud)