2009-08-07 3 views
0

Ich versuche zu benachrichtigen, einen Haupt-GTK-Thread (aus einem separaten Thread), dass einige sogar mit Pipes aufgetreten sind. Ich bekomme die folgende Warnung, wenn ich versuche, Pipes einzurichten. Was ist eine gute Problemumgehung?Fehler beim Konvertieren einer Pipe (Handler) in fd on vs 2003

, wenn ich diese g_io_channel_win32_new_fd kann ich diese Warnung zu sehen, und somit Rohr durchaus nicht :(

Glib-WARNUNG erstellt **: giowin32.c: 1564: 3 nicht eine C-Bibliothek Dateideskriptors

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); 

    } 

Ziel ist es Hauptanwendung zu informieren, dass etwas in thread Thread aufgetreten ist. in meinem Fall kann ich nicht gtk in Multi-threaded-Art und Weise verwendet (Aufruf von Funktionen des Haupt-Thread von gelaicht eins), also versuche ich es über Rohre zu tun.

Ich sah auch, dass es ein visuelles Studio Problem in diesem thread

sein könnte Irgendwelche Vorschläge?

Antwort

1

Wie der Fehler sagt, sind mit CreatePipe erstellte Handles keine Dateideskriptoren. Das Windows-Programmiermodell verwendet keine Dateideskriptoren. Daher können Sie Windows- und Nicht-Windows-E/A-Funktionen normalerweise nicht mischen und abgleichen. Ich vermute, wenn Sie einige der Umwandlungen in Ihrem Code entfernt haben, würde Ihr Compiler das Problem lokalisieren - C-style (oder reinterpretieren) carrs in C++ code sind fast immer ein Zeichen, dass Sie etwas falsch machen.

+0

Danke, das verstehe ich - was würden Sie als Workaround empfehlen? – vehomzzz