小编Jus*_*les的帖子

使用AtomicInteger作为静态共享计数器

为了通过Java了解同步,我只是搞乱一些简单的事情,比如创建线程之间共享的计数器.

我遇到的问题是我无法弄清楚如何在100%的时间内依次打印计数器.

int counterValue = this.counter.incrementAndGet();
System.out.println(this.threadName + ": " + counterValue);
Run Code Online (Sandbox Code Playgroud)

上面增加AtomicInteger counter,获取新值,并将其打印到由负责该更新的线程名称标识的控制台.当incrementAndGet()打印当前线程的更新值之前,该方法似乎导致JVM上下文切换到另一个线程以进行更新时,会出现问题.这意味着在线程返回执行状态之前,该值会增加但不会打印.在查看此示例输出时,这很明显:

Thread 3: 4034
Thread 3: 4035
Thread 3: 4036
Thread 1: 3944
Thread 1: 4037
Thread 1: 4039
Thread 1: 4040
Thread 2: 3863
Thread 1: 4041
Thread 1: 4043
Run Code Online (Sandbox Code Playgroud)

您可以看到,当执行返回到线程1时,它会打印其值并继续更新.线程2也是如此.

我有一种感觉,我错过了一些非常明显的东西.

java multithreading synchronization

4
推荐指数
1
解决办法
6757
查看次数

List <T> .AddRange导致短暂延迟

我有一个实现ICollidable接口的实体列表.此接口用于解决实体之间的冲突.因此我的实体是:

  • 玩家
  • 敌人
  • 项目
  • 瓷砖

在每次游戏更新(大约60 t/s)时,我正在清除列表并根据游戏状态添加当前实体.我通过以下方式完成此任务:

collidableEntities.Clear();
collidableEntities.AddRange(players);
collidableEntities.AddRange(enemies);
collidableEntities.AddRange(projectiles);
collidableEntities.AddRange(items);
collidableEntities.AddRange(camera.VisibleTiles);
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我将可见的瓷砖添加到列表中.运行游戏循环的前1-2秒会导致可见的打嗝延迟绘制(因此我可以看到渲染中的抖动).我可以逐字地删除/添加添加切片的行,看看是否发生抖动,所以我将其缩小到该行.

我的问题是,为什么?VisibleTiles列表大约有450-500个磁贴,因此实际上并没有那么多数据.每个图块包含Texture2D(图像)和Vector2(位置),以确定渲染的内容和位置.我要继续寻找,但是从我的头顶,我无法理解为什么只有前1-2秒打嗝然后从那里开始顺利.

任何建议表示赞赏.

更新

我已经尝试将初始容量增加到大约元素量,但没有观察到差异.

更新

根据要求,这是camera.VisibleTiles的代码

public List<Tile>
{
    get { return this.visibleTiles; }
}
Run Code Online (Sandbox Code Playgroud)

c# xna profiling list

3
推荐指数
1
解决办法
1369
查看次数

RenderTransform在TextBlock上的EntranceThemeTransition之后发生

我正在应用EntranceThemeTransition动画TextBlock.该TextBlock具有的风格PageHeaderTextStyle具有RenderTransform它.我遇到的问题是,在动画完成播放之前,RenderTransform应用的Translation效果实际上不会呈现.因此,它看起来很奇怪,因为动画会滚动控件,然后突然翻译将文本捕捉到位.有谁知道为什么会这样?

有没有办法在考虑翻译的情况下播放动画?

转变:

<Setter Property="RenderTransform">
    <Setter.Value>
        <TranslateTransform X="-2" Y="8"/>
    </Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)

TextBlock的:

<TextBlock x:Name="pageTitle" Grid.Column="1" Text="{Binding Title}" Style="{StaticResource PageHeaderTextStyle}">
    <TextBlock.Transitions>
        <TransitionCollection>
            <EntranceThemeTransition/>
        </TransitionCollection>
    </TextBlock.Transitions>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

xaml microsoft-metro windows-8 windows-runtime windows-store-apps

3
推荐指数
1
解决办法
693
查看次数

通用协方差解决方法?

我有子弹:

public LaserBullets : Projectile
Run Code Online (Sandbox Code Playgroud)

我有一把枪,它继承了一种基本武器,子弹类型与衍生枪一起:

public LaserWeapon : Weapon<LaserBullets>
Run Code Online (Sandbox Code Playgroud)

我有一个属性来建立一个玩家的当前武器:

public Weapon<Projectile> CurrentWeapon
{
    set { currentWeapon = value; }
}
Run Code Online (Sandbox Code Playgroud)

这失败了(不能隐式地转换LaserWeaponWeapon<Projectile>)

player.CurrentWeapon = new LaserWeapon();
Run Code Online (Sandbox Code Playgroud)

我已经读到C#中没有对某些协方差的支持,但我不想认为我被困在这里.有没有办法让我的情况有效?我正在尝试在玩家类中维护一个基础武器,但在另一个类中使用更具体的武器.

我尝试为LaserWeapon创建自己的强制转换操作符,但是我收到了一个关于无法强制转换为基类的错误.

c# generics casting

2
推荐指数
1
解决办法
161
查看次数

XNA的自动XNB序列化支持哪些类型?

我已经阅读了Shawn Harvgreave关于自动序列化的博客文章和关于内容管道概述的MSDN文章,但我找不到支持的类型列表.

引用MSDN:

从XNA Game Studio 3.1开始,对于没有现有内容类型编写器的简单类型,自动完成自定义数据到.XNB格式的序列化.

直到我试图用我还没有这个问题,QueueSystem.Collections.Generic我猜是不是由自动序列化的支持.

那么,是否有一个支持的类型列表?而如果不支持的话,会我需要写我自己的ContentTypeWriterContentTypeReader

c# xna serialization content-pipeline

2
推荐指数
1
解决办法
655
查看次数

async关键字如何与Azure Worker Roles一起使用?

我正在玩Azure Worker Roles.调用异步WinRT方法并使用await关键字时,服务执行结束.我猜这是因为await返回控制权给调用者,这是服务内部的链接.也许调用者在Run()完成执行并假定服务已完成或出现故障之前不期望返回控制权?

我不确定,是否有人知道是否async打算与Azure Worker Roles一起使用?

c# asynchronous azure azure-worker-roles

2
推荐指数
1
解决办法
963
查看次数

Tomcat 6和部署时更新context.xml

我正在使用:

  • Tomcat 6.0.30

这是我的Web应用程序项目中的context.xml和web.xml结构:

  • META-INF
    • context.xml
  • 网络信息
    • web.xml

当我为我的应用程序生成WAR文件时,context.xml将按预期打包。当我将WAR文件复制到Tomcat webapps文件夹并启动Tomcat时,将提取WAR文件并将context.xml复制到\conf\Catalina\localhost\<webappname>.xml预期的位置。但是,这仅在<webappname>.xml尚不存在时才起作用。因此,如果不先删除现有,就无法更新context.xml,打包WAR和重新部署<webappname>.xml。我知道这是基于阅读文档所预期的功能。

我的问题是,我该怎么办?如何更新context.xml并自动复制这些更新,就像它们是全新的一样?我不想<webappname>.xml在每次发布之前都删除它。

也许我会以错误的方式进行操作?

tomcat tomcat6

1
推荐指数
1
解决办法
1802
查看次数