c - gtk/c 在线程中操作 GUI : strange errors

标签 c multithreading user-interface gtk

我使用udp编写了一个C/S应用程序,但它总是给我错误,我认为这与我使用线程的方式有关。

客户端程序启动时,首先初始化一个登录窗口,并启动一个新线程来监听服务器的响应。提交用户名和密码后,新线程将收到一条消息,指示其是否提交了正确的信息。如果是这样,那么该线程将初始化主 GUI 窗口。但它会给出奇怪的错误:

Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0

python: Fatal IO error 0 (Success) on X server :0.0

我发现了类似的问题here ,但还没有解决。

有人说 GUI 只能在主线程中操作,但其他人说这不是真的。

我还尝试在 gtk_main() 周围使用 gdk_threads_enter()gdk_threads_enter() 以及我在该监听线程中初始化窗口的代码。但似乎没有效果。

我对线程了解不多,所以请耐心指出我做错的地方。

谢谢。

最佳答案

我发现,当您没有正确持有 GTK 锁时,这些错误消息会不时弹出。

您应该将 gdk_threads_enter()gdk_threads_leave() 放在原始 gtk_main() 调用周围,并且 围绕每次发生的 GTK 函数调用

  • 在调用 gtk_main() 的线程之外
  • 但不在信号、空闲或超时处理程序中。

据我了解,这种用法正在逐渐消失,并且在 GTK 的 future 版本中,只能从主线程操作 GTK。

关于c - gtk/c 在线程中操作 GUI : strange errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11453733/

相关文章:

c++ - 即使文件描述符不可用,也能有效地监听多个套接字

android - 在 Android NDK 中包含 GLES31

c# - 父线程休眠时子线程也休眠?

Java多线程: thread safe data structure vs.同步方法

eclipse - 哪些 UI 模型工具可用于生成 Eclipse UI "screenshots"?

user-interface - 在 MATLAB GUI 中中断 for 循环

c - 过滤 pcap 转储文件中的数据包

c++ - C 中 ubuntu 上的性能计数器库

java - MDC没有从Hystrix线程传输到tomcat线程

java - GUI 表单设计数据绑定(bind)的优缺点