我使用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/