SDL和X11多线程致命IO错误
SDL and X11 multithreading Fatal IO Error
我正在尝试使用C++和SDL创建一个简单的多线程示例,如下所示:
#include <iostream>
#include "SDL/SDL_image.h"
#include "SDL/SDL.h"
#include "SDL/SDL_thread.h"
#include "X11/Xlib.h"
#include "SDLAbstractionLayer.h"
#include <string>
using namespace std;
SDL_Thread* thread = NULL;
bool quit = false;
int myThread(void* data) {
while (!quit) {
//caption animation
SDL_WM_SetCaption ("Thread is running", NULL);
SDL_Delay(250);
SDL_WM_SetCaption("Thread is running.", NULL);
SDL_Delay(250);
SDL_WM_SetCaption("Thread is running..", NULL);
SDL_Delay(250);
SDL_WM_SetCaption("Thread is running...", NULL);
SDL_Delay(250);
}
return 0;
}
int main(int argc, char* argv[]) {
SDL_Surface* screen = init(640, 480, "");
XInitThreads();
Surface test("resources/image.png");
thread = SDL_CreateThread(myThread, NULL);
SDL_Event event;
while (!quit) {
if(SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = true;
break;
}
fillScreen(screen, Surface::WHITE);
applySurface(0, 0, test, screen);
flip(screen);
}
}
cleanUp();
SDL_KillThread(thread);
return 0;
}
问题是,当我在Eclipse或终端中运行它时,我会得到以下消息:
XIO: fatal IO error 0 (Success) on X server ":0.0"
after 113 requests (113 known processed) with 0 events remaining.
或者这个:
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
after 113 requests (113 known processed) with 2 events remaining.
我正在使用带有Eclipse开普勒的Ubuntu 13。我试着做了一些研究,但没能找到任何有用的东西。
编辑:所以我更新了代码,包括一个计数器和一些到处都是的cout:
int myThread(void* data) {
while (!quit) {
//caption animation
SDL_WM_SetCaption ("Thread is running", NULL);
SDL_Delay(250);
cout << "Thread is running 1" << endl;
SDL_WM_SetCaption("Thread is running.", NULL);
SDL_Delay(250);
cout << "Thread is running 2" << endl;
SDL_WM_SetCaption("Thread is running..", NULL);
SDL_Delay(250);
cout << "Thread is running 3" << endl;
SDL_WM_SetCaption("Thread is running...", NULL);
SDL_Delay(250);
cout << "Thread is running 4" << endl;
}
return 0;
}
int main(int argc, char* argv[]) {
SDL_Surface* screen = init(640, 480, "");
XInitThreads();
Surface test("resources/image.png");
thread = SDL_CreateThread(myThread, NULL);
SDL_Event event;
int count = 1;
while (!quit) {
if(SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = true;
break;
}
fillScreen(screen, Surface::WHITE);
applySurface(0, 0, test, screen);
flip(screen);
cout << "finished iteration " << count++ << endl;
}
}
下面是控制台运行一次后的输出:
finished iteration 1
Thread is running 1
XIO: fatal IO error 0 (Success) on X server ":0.0"
after 113 requests (113 known processed) with 0 events remaining.
然后,在第二次运行后:
finished iteration 1
finished iteration 2
Thread is running 1
Thread is running 2
XIO: fatal IO error 0 (Success) on X server ":0.0"
after 116 requests (116 known processed) with 0 events remaining.
如果有疑问,请在主线程上执行所有SDL操作。
主要异常是SDL_PostEvent()
。
没关系。我刚刚收到了一封发给制作教程的人的电子邮件的回复,我正在关注:
是的,这是我的应用程序中的错误,我正在SDL2.0教程中修复它。查看SDL2.0多线程示例以获得修复。问题是SDL多个线程执行渲染不起作用。因此,从另一个线程设置标题工作不正常。在2.0教程中,渲染是在一个线程和控制台输出中进行的在另一个中。
相关文章:
- Agora.io 虚幻引擎插件构建错误
- Xcode OSX上的C++构建失败,出现多个错误文件IO..不可用:在macOS 10.15中引入
- socket.io client std :: bind-错误C2338:元组索引限制
- 致命错误: avr/io.h: 没有这样的文件或目录
- 如何检索基础块设备IO错误
- boost asio自定义分配器处理程序io服务编译后错误
- 文件IO循环错误
- Xlib:关闭窗口总是会导致致命的 IO 错误
- C++ 中的详细文件 IO 错误报告
- SDL和X11多线程致命IO错误
- IO操作员过载错误
- 在C++文件IO期间捕获所有错误(或ios对象中的任何错误)的最佳实践
- RocksDB IO错误:锁定db/lock:没有可用的锁
- 调用WP 8(C#)中的WinRT组件时出现System.IO.FileNotFoundException错误
- 运行时错误与文件io和向量(c++)
- 运行Windows Phone 8应用程序时出现System.IO.FileNotFoundException错误
- LLVM IO错误-写入bc文件时出错
- 文件 io - C++ SIGSEGV 分段错误在循环中
- 提升序列化 IO 错误
- Xlib致命IO错误:11(资源暂时不可用),由不使用XCloseDisplay()引起