游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1869|回复: 3

一般渲染时写在主线程里么?

[复制链接]

75

主题

102

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2009-5-31 18:16:00 | 显示全部楼层 |阅读模式
菜鸟问题,多多指点
我的渲染要不停的遍历容器,但这个容器要受服务器的控制,也就是说增减容器的大小,是由服务器来决定的,所以我开了另一个线程用来接收消息,如果消息来了,就向该容器里添加一个(或减少一个)元素,但问题来了,因为我在渲染里面不停的遍历该容器,所以这里要加个锁,可是这样处理的话,不久拖慢主线程了么,我的想法是在开一个线程,把渲染单独写在我单独为它创建的线程当中,不知道这样可不可行,和不合理呢?

谢谢

1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2009-5-31 22:44:00 | 显示全部楼层

Re:一般渲染时写在主线程里么?

建议:由于服务器来回数据要一定时间,将从服务器过来数据放到一个链表里,
然后加锁,加锁只是变换指针,减少加锁时间
例如
P* p1;
P* p2

写入线程,
Lock
p1->push(data);
Unlock

读取线程
可以在一定时间后,作如下判断,反正服务器来回是有时间延迟的,不用很频繁的读取
if(p1->Count()>0)
{
  P* p3;
  Lock
     p3=p1;
     p1=p2;
     p2=p3;
  UnLock
  处理p2并清空
}


由渲染线程定时去读取,

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2009-6-1 23:03:00 | 显示全部楼层

Re:一般渲染时写在主线程里么?

用 RingBuffer,无须加锁。

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
发表于 2009-6-4 10:38:00 | 显示全部楼层

Re:一般渲染时写在主线程里么?

服务器来的数据,都加到一个缓冲队列里

主线程中开始渲染前,取空这个缓冲队列后,渲染

如此反复。。。


对服务器来的数据,不都这样先放到缓冲队列里吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 02:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表