我刚刚开始使用 SDL2,因为在 C# 中具有可移植 UI 的真正前景。无论如何,我是一个窗口,一个画布,一个事件循环的想法的粉丝。使基本建模中的某些事情变得更简单。但这意味着现在我需要问一些非常基本的问题。
我有一个进入事件循环的前台线程。在某些时候,后台线程需要告诉前台线程应用程序状态已更改,并且需要重绘某些内容(或视情况而定的所有内容)。 SDL 有应用程序事件,但我不知道如何发送它们。
void redraw() {
var surface = SDL_GetWindowSurface(window);
SDL_FillRect(surface,IntPtr.Zero,SDL_MapRGB(surface.GetPixelFormat(),0x9F,0xFF));
SDL_UpdateWindowSurface(window);
}
new Thread(() => {
Thread.Sleep(30000);
/* SEND EVENT HERE */
}).Start();
bool done = false;
while (!done && SDL_WaitEvent(out var ev) != 0) {
switch (ev.type) {
case SDL_USEREVENT:
redraw();
break;
case SDL_WINDOWEVENT:
switch (ev.window.windowEvent) {
case SDL_WINDOWEVENT_CLOSE:
SDL_DestroyWindow(window);
done = true;
break;
}
break;
}
但我找不到如何从另一个线程发送用户事件。
不要告诉我使用 SDL 计时器。那是样板。真正的代码是别的东西。