gpt4 book ai didi

c++ - 进程外渲染

转载 作者:行者123 更新时间:2023-11-28 08:25:56 37 4
gpt4 key购买 nike

我正在尝试为我的应用程序实现进程外渲染(就像 chrome 所做的那样)。我已经设置了 ipc(进程间通信)并正常工作,但是当尝试在另一个进程上初始化新表单时它只是死锁。

我已经开始使用继承句柄作为 true 的过程,还有什么我需要做的吗?

如果需要,我很乐意提供示例代码。

编辑:它在窗口 api 调用中死锁。在同一进程中运行良好

最佳答案

如果两个线程拥有具有任何类型关系的窗口,则很容易耦合两个线程。

这样做的有效结果是,您的 IPC 调用在等待回复时无法阻塞 - 您的 IPC 读取始终需要使用 MsgWaitForMultipleObjects这样您就可以在等待指示完成的 IPC 消息的同时处理来自其他进程/线程的窗口消息。


您所做的是用 MSGWaitForMultipleObjects 替换当前对 WaitForMultipleObjects 的调用。当它返回时,您检查返回值。如果 nCount 是您等待收到信号的 IPC 句柄数:

// Pump messages while waiting on 0 or more handles.
for(;;)
{
while(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

DWORD ret = MsgWaitForMultipleObjects(nCount,pHandles,FALSE,dwTimeout,QS_ALLEVENTS);
if(ret >= WAIT_OBJECT_0 && ret < (WAIT_OBJECT_0 + nCount))
{
// one of the handles was signalled.
return ret;
}
else if(ret == WAIT_OBJECT_0 + nCount)
{
// The wait was aborted because there is at least one message,
// go back to pumping messages
continue;
}
else
{
// test for WAIT_OBJECT_ABANDONED_0, WAIT_TIMEOUT etc. as appropriate
}
}

关于c++ - 进程外渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4104567/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com