Fehler ein Rohr (Handler) Umwandlung vs 2003 bis fd auf
Frage
Ich versuche, einen Haupt-gtk Thread zu verwenden, benachrichtigt (von einem separaten Thread), dass einige sogar Rohre aufgetreten verwenden. Ich erhalte die folgende Warnung, wenn ich Setup Rohre versuchen. Was ist eine gute Abhilfe?
, wenn ich kann dieses g_io_channel_win32_new_fd, ich sehe diese Warnung, und somit Rohr gar nicht erstellt: (
Glib-WARNING **: giowin32.c: 1564: 3 nicht eine C-Bibliothek Dateideskriptor
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 );
}
Das Ziel ist Hauptanwendung zu informieren, dass etwas in thread Thread aufgetreten. In meinem Fall kann ich gtk nicht verwenden in Multi-Threaded-Weg (Aufruf von Funktionen des Haupt-Thread von gelaicht ein), so versuche ich es über Rohre zu tun.
Ich sah auch, dass es sich um eine Visual Studio Ausgabe in dieser sein könnte
Lösung Wie der Fehler sagt, Griffe von CreatePipe erstellt werden nicht Deskriptoren Datei. Das Windows-Programmiermodell nicht Filedeskriptoren verwenden, so können Sie normalerweise nicht mischen und Windows und Nicht-Windows-I / O-Funktionen entsprechen. Ich vermute, wenn Sie einige der Abgüsse in Ihrem Code entfernt, den Compiler das Problem lokalisieren würde - C-Stil (oder neu zu interpretieren) CaSrS in C ++ Code
fast immer ein Zeichen sind Sie etwas falsch zu machen.