【发布时间】:2019-04-24 13:37:04
【问题描述】:
我正在用 GTK 编写一个聊天客户端。客户端具有主 GTK 循环,以及一个衍生线程,该线程位于 read() 函数处并阻塞,等待来自连接到套接字的文件描述符的输入。
一旦读取函数通过阻塞,它就有一个字符缓冲区的文本,我想将它附加到 GTK 文本视图小部件,但是,这是在一个不同于主 GTK 循环的线程中。
我怎样才能最快速地从其他线程更新 GUI?在 Java 中,我会使用 SwingUtilities.invokeLater(new Runnable()) 方法来导致从主线程调用该方法。我希望在 C 和使用 GTK 中有类似的行为。
这是从新线程调用的函数...
void* messageReceived(void* data)
{
struct ClientWindow* localVar = (struct ClientWindow*)data;
while(TRUE)
{
char buf[256];
int bytesRead = read(localVar->socketFileDescriptor, buf, 256);
GtkTextBuffer* tb = gtk_text_view_get_buffer(GTK_TEXT_VIEW(localVar->chatHistoryTextView));
GtkTextIter end;
//This code needs to execute in the main thread
gtk_text_buffer_get_end_iter(tb, &end);
gtk_text_buffer_insert(tb, &end, buf, -1);
}
}
【问题讨论】:
标签: c multithreading user-interface gtk gtk2