optimized WorkManager, fixed crash after close window.

This commit is contained in:
hyzboy 2025-01-25 20:01:37 +08:00
parent 6fdf0e1fbd
commit a569d08269
3 changed files with 32 additions and 25 deletions

View File

@ -157,10 +157,10 @@ int main(int,char **)
WorkManager wm(&rf); WorkManager wm(&rf);
AutoDelete<TestApp> app=new TestApp(&rf); TestApp *test=new TestApp(&rf);
if(!app->Init()) if(!test->Init())
return(-2); return(-2);
wm.Start(app); wm.Start(test);
} }

View File

@ -65,6 +65,7 @@ namespace hgl
double last_update_time=0; double last_update_time=0;
double last_render_time=0; double last_render_time=0;
double cur_time=0;
WorkObject *cur_work_object=nullptr; WorkObject *cur_work_object=nullptr;
@ -88,12 +89,7 @@ namespace hgl
void Update(WorkObject *wo) void Update(WorkObject *wo)
{ {
double cur_time=GetDoubleTime(); double delta_time=cur_time-last_update_time;
double delta_time;
if(wo->IsTickable())
{
delta_time=cur_time-last_update_time;
if(delta_time>=frame_time) if(delta_time>=frame_time)
{ {
@ -102,9 +98,9 @@ namespace hgl
} }
} }
if(wo->IsRenderable()) void Render(WorkObject *wo)
{ {
delta_time=cur_time-last_render_time; double delta_time=cur_time-last_render_time;
if(delta_time>=frame_time) if(delta_time>=frame_time)
{ {
@ -112,19 +108,30 @@ namespace hgl
wo->Render(delta_time); wo->Render(delta_time);
} }
} }
}
void Run() void Run()
{ {
if(!cur_work_object) if(!cur_work_object)
return; return;
Window *win=render_framework->GetWindow();
graph::GPUDevice *dev=render_framework->GetDevice();
while(!cur_work_object->IsDestroy()) while(!cur_work_object->IsDestroy())
{ {
cur_time=GetDoubleTime();
if(cur_work_object->IsTickable())
Update(cur_work_object); Update(cur_work_object);
render_framework->GetWindow()->Update(); if(win->IsVisible()&&cur_work_object->IsRenderable())
render_framework->GetDevice()->WaitIdle(); {
Render(cur_work_object);
dev->WaitIdle();
}
if(!win->Update())
break;
} }
} }

2
res

@ -1 +1 @@
Subproject commit 475d8ad43ceee084cd24f5d0bed59de9f6aa36fd Subproject commit e1a36d78f0eead5f6bb65493432c4690637b991d