首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在directx中创建加载程序线程

如何在directx中创建加载程序线程
EN

Stack Overflow用户
提问于 2013-10-15 20:37:24
回答 1查看 280关注 0票数 1

我有一个游戏引擎,它使用Directx 9进行渲染。我希望能够在主更新和渲染循环执行的同时加载精灵图形。目前,引擎有一个主更新和渲染循环,所以在此进行的任何加载都将在图形加载时暂停主循环。

我正在寻找POSIX线程来做这件事。我已经创建了线程函数并包含了互斥锁,但代码在运行时会崩溃。

以下是线程函数:

代码语言:javascript
复制
void GameApp::InternalThreadEntry()
{
    pthread_mutex_lock (&mutex);

    for(int i = 0; i < MAX_NUMBER; i++)
    {
        test_loader_sprites[i].loadImage(window1,"Test_Image.tga");
    }

    has_finishd_loading = true;

    pthread_mutex_unlock (&mutex);
}

代码在我的引擎渲染函数中崩溃。我确信这是因为directx设备是window1实例的成员,它被线程访问以加载,而主应用程序访问它以进行呈现。

你能说明一下我哪里出错了吗?我是个使用线程的新手。

万事如意,马丁

EN

回答 1

Stack Overflow用户

发布于 2013-10-15 21:15:10

穿线常常是一只穿着羊皮的狼。它看起来解决了这么多问题,但实际上可能导致的问题比他们解决的问题多得多。幸运的是,您有许多人认为有效的方案可以使用额外的线程。

我之前写过一个类似的加载器,你的问题看起来确实是你正在访问Window1,而它却在其他地方被使用。基本上,你的主线程会在线程运行时对Window1做些什么吗?如果是这样,那么这就表明这就是问题所在。

我找到的解决方案是适当地将数据存储与渲染器分开。您可以将数据加载到线程中的存储区。完成后,将存储中的信息传递给线程末尾的主线程(或稍后直接在主线程中移动它)。这避免了对线程中的Window1对象的依赖。

在开始一个更大规模的场景之前,做一些关于线程的进一步阅读将是一个好主意。使用线程是软件设计中比较繁琐和复杂的领域之一,根据经验,您无法很好地学习它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19381428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档