メインの 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 を使用できない (生成されたスレッドからメインスレッドの関数を呼び出す) ため、パイプ経由で実行しようとしています。
また、このスレッドでビジュアルスタジオの問題である可能性があることもわかりました
助言がありますか?