gpt4 book ai didi

c++ - 在 vs 2003 上将管道(处理程序)转换为 fd 时出错

转载 作者:行者123 更新时间:2023-11-28 08:32:33 24 4
gpt4 key购买 nike

我正在尝试使用通知主 gtk 线程(从一个单独的线程)有些甚至发生使用管道。当我尝试设置管道时收到以下警告。什么是好的解决方法?

当我可以使用 g_io_channel_win32_new_fd 时,我看到了这个警告,因此根本没有创建管道 :(

GLib-WARNING **: giowin32.c:1564: 3 不是 C 库文件描述符

    int fds[2];
GIOChannel* gioChannels[2];
HANDLE rdPipe, wrPipe;
SECURITY_ATTRIBUTES saAttr;

saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
if (CreatePipe(&rdPipe, &wrPipe, NULL, 1024))
{
fds[0] =_open_osfhandle((gssize)rdPipe, O_RDONLY);
fds[1] = _open_osfhandle((long)wrPipe,_O_APPEND);

gioChannels[0] =g_io_channel_win32_new_fd(fds[0] );
gioChannels[1] =g_io_channel_win32_new_fd(fds[0] );

g_io_add_watch( gioChannels[1],(GIOCondition) (G_IO_IN | G_IO_HUP),
(GIOFunc)SomeCallaback,(gpointer)this );

}

目标是通知主应用程序thread线程中发生了一些事情。在我的例子中,我不能以多线程方式使用 gtk(从派生线程调用主线程的函数),所以我试图通过管道来完成。

我还看到这可能是这个 thread 中的 Visual Studio 问题

有什么建议吗?

最佳答案

如错误所述,CreatePipe 创建的句柄不是文件描述符。 Windows 编程模型不使用文件描述符,因此您不能正常混合和匹配 Windows 和非 Windows I/O 函数。我怀疑如果您删除了代码中的一些强制转换,您的编译器会查明问题 - C 风格(或重新解释)C++ 代码中的 casrs几乎总是表明您做错了什么。

关于c++ - 在 vs 2003 上将管道(处理程序)转换为 fd 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1244847/

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