Я пытаюсь использовать уведомление основного потока 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 );
}
Цель состоит в том, чтобы уведомить основное приложение о том, что что-то произошло в потоке потока. В моем случае я не могу использовать gtk многопоточным способом (вызывая функции основного потока из порожденного), поэтому я пытаюсь сделать это через каналы.
Я также видел, что это может быть проблема визуальной студии в этой теме
Есть предложения?