作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
感谢您花时间回答我的问题!
我的目标:读取日志文件,将其显示到 TextView 小部件中,然后每次向文件中添加新行时更新它(看起来很简单)
问题:似乎总是满足 G_IO_IN 条件,即使对于 G_STATUS_EOF 也是如此。因此,程序挂起并且不显示任何内容。
以下是一些代码摘录:
1,打开文件,读取它并将其显示到 TextView 中(效果很好):
// Get the TextBuffer then go to the latest position (not sure it is useful)
txtBuf=gtk_text_view_get_buffer((GtkTextView *)tvLogs);
gtk_text_buffer_get_end_iter(txtBuf, &txtIter);
// Connect logfile to new IOChannel and add_watch to G_IO_IN condition
chanErr=g_io_channel_new_file("./errorlog.log","r", &error);
g_io_add_watch(chanErr, G_IO_IN, (GIOFunc)DisplayLogs, NULL);
// Read the whole file and display it into the TextView
ret=g_io_channel_read_to_end(chanErr,&file, &fileLen, &err)
g_assert(ret == G_IO_STATUS_NORMAL);
// Insert file read into the TextView
gtk_text_buffer_insert(txtBuf, &txtIter, file, fileLen);
此时,一切运行良好...这是连接到 G_IO_IN 条件的回调:
gboolean DisplayLogs(GIOChannel *chanErr, GIOCondition cond, gpointer data)
{
GtkWidget *tvLogs;
gchar *buf;
gsize bufLen;
GError *err=NULL;
GtkTextBuffer *txtBuf;
GtkTextIter txtIter;
GIOStatus ret;
// Retrieve the TextView
tvLogs=GTK_WIDGET(gtk_builder_get_object(builder,(gchar*)"tvLogs"));
g_assert(tvLogs);
// Try to read 1 line
ret=g_io_channel_read_line(chanErr, &buf, &bufLen, NULL, &err);
if (ret!=G_STATUS_NORMAL) {
switch (ret) {
case G_IO_STATUS_ERROR : g_warning("G_IO_STATUS_ERROR"); break;
case G_IO_STATUS_EOF : g_warning("G_IO_STATUS_EOF"); break;
case G_IO_STATUS_AGAIN : g_warning("G_IO_STATUS_AGAIN"); break;
}
if (err)
g_warning(err->message);
}
//
....
other stuff to update info displayed but never reached
//
return TRUE;
}
当应用程序启动时:它在“G_STATUS_EOF”上无限循环。看来这个事件触发了 G_IO_IN 条件并触发回调。
有什么想法吗?
提前非常感谢。
问候。
--文森特
最佳答案
好吧,既然没有人回答,我就得自己想办法了(这确实是一件好事)。
问题是:如何在 TextView 中显示来自文件的日志条目。
找到解决方案:
结果很好。我有日志文件和窗口日志。
问题已解决(或解决方法,具体取决于:-))
问候。
关于c - GTK IOChannel - 如何处理G_IO_IN事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322694/
我是一名优秀的程序员,十分优秀!