小编Jon*_*ong的帖子

C#和.NET:stackalloc

我对stackalloc操作员的功能有几个问题.

  1. 它是如何实际分配的?我认为它的确如下:

    void* stackalloc(int sizeInBytes)
    {
        void* p = StackPointer (esp);
        StackPointer += sizeInBytes;
        if(StackPointer exceeds stack size)
            throw new StackOverflowException(...);
        return p;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    但我做了一些测试,我不确定它是如何工作的.我们无法确切知道它的作用以及它是如何做到的,但我想知道基础知识.

  2. 我认为堆栈分配(好吧,我确实相信它)比堆分配快.那么为什么这个例子:

     class Program
     {
         static void Main(string[] args)
         {
             Stopwatch sw1 = new Stopwatch();
             sw1.Start();
             StackAllocation();
             Console.WriteLine(sw1.ElapsedTicks);
    
             Stopwatch sw2 = new Stopwatch();
             sw2.Start();
             HeapAllocation();
             Console.WriteLine(sw2.ElapsedTicks);
         }
         static unsafe void StackAllocation()
         {
             for (int i = 0; i < 100; i++)
             {
                 int* p = stackalloc int[100];
             }
         }
         static void HeapAllocation() …
    Run Code Online (Sandbox Code Playgroud)

.net c# performance stack stackalloc

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

蓝牙广播

我想使用蓝牙将数据从一台设备广播到附近的众多设备.现在,我知道蓝牙广播存在,但是可以使用Android现有的API吗?如果没有,是否有任何其他第三方API可用于它?

关于蓝牙广播的另一个问题:即使您没有收听广播,您是否可以开始收听正在进行的广播并从中接收数据?例如,让设备A成为广播公司,并在5秒内广播以下数据:

1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

设备B在整个广播过程中接收到数据,因此他收到:

1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

收到的设备C仅在2秒后开始收听,而设备A正在广播5.他会5 6 7 8 9 10按预期接受其余的()吗?

android bluetooth broadcast

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

第一次机会例外

我正在研究C#中的套接字,在我编写了一个基本的双人聊天编码之后,我决定继续进行多人聊天,它有一个服务器和X客户端.

现在,即使只连接了一个客户端,也会出现问题.一旦客户端连接,服务器和客户端都会收到消息"另一个客户端连接"或"连接到服务器".第二个他们都点击OK,客户端程序崩溃,服务器一个跟随(我稍后会处理断开连接,我想先让它工作).正如你可以从标题中猜到的那样,我唯一得到的是"第一次机会异常",即使在谷歌搜索或阅读之后,我也无法阻止它的到来,也无法理解为什么会这样.

以下是调试器输出中的两行:

mscorlib.dll中发生了'System.FormatException'类型的第一次机会异常

程序'[6808] Chat - sockets.vshost.exe:Managed(v4.0.30319)'已退出,代码为0(0x0).

尝试捕获此异常时,try-catch不起作用.正如我之前所说,程序甚至在调试模式下崩溃,没有显示错误.

以下是代码:

客户端连接回调:

private void ClientConnectCallback(IAsyncResult res)
{
    serverSocket.EndConnect(res);
    MessageBox.Show("Server connected.");
    serverSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ClientRecieveCallback), null);
}
Run Code Online (Sandbox Code Playgroud)

buffer是一个局部变量,一个大小为1000的字节数组.serverSocket是一个套接字,我们使用'BeginConnect'方法.

这是服务器接受客户端回调:

private void ServerAcceptCallback(IAsyncResult res)
{
    //Recieving the socket.
    Socket tempSocket = localHost.EndAccept(res);

    //Creating a new buffer for it.
    byte[] tempBuffer = new byte[1000];

    //Adding the socket to the array.
    Socket[] tempArray = clients;
    clients = new Socket[tempArray.Length + 1];
    Array.Copy(tempArray, clients, tempArray.Length);
    clients[clients.Length - 1] = tempSocket;

    //Adding the buffer to …
Run Code Online (Sandbox Code Playgroud)

c# sockets

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

setStreamMute永远不会取消静音

在文档中,有人说:

静音命令受到保护以防止客户端进程死亡:如果流上有活动静音请求的进程终止,则此流将自动取消静音.

对给定流的静音请求是累积的:AudioManager可以从一个或多个客户端接收几个静音请求,并且只有在收到相同数量的取消静音请求时才会取消静音.

那么,第一段是真的; 每当我的进程终止时,我静音的所有流都会自动取消静音.然而,无论我多少次打电话,setStreamMute(someStream, false)它都永远无法取消静音.上次我在静音后尝试调用它超过100万次而且没有发生!

只是要提一下 - 如果我用同样的方法取消静音,我会把它静音 - 它保持不变.但是在下一次调用相同的方法时 - 它永远不会取消静音.

我在广播接收器onReceive方法中静音,我开始使用报警管理器.也许是因为我的应用程序在静音呼叫和取消静音呼叫之间被杀死了?(但我的应用程序仍然留在RAM中)

这个问题可能是因为我没有保留对AlarmManager的引用(每次都有不同的实例吗?)

有人遇到过这个问题吗?

android android-audiomanager

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

创建一个随机的正弦图,如景观精灵

让我们说我有这个精灵:

样本精灵

我在运行时创建了一个随机的景观:

动态运行时环境

然后,我想用精灵平铺线下方的区域:

在此输入图像描述

这是游戏场,因此它也应该是一个物理对象(In Box2D).

在这里,他给出了一个如何使其成为物理体的样本.那么,我如何在代码中执行图形部分?

编辑:查看AndEngine示例,文件RepeatingSpriteBackgroundExample.java,它不是我需要的,但我应该坚持这个想法并根据我的需要更改RepeatingSpriteBackground类?我认为那不是最好的方法......

提前致谢.

android sprite box2d andengine

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

我们如何轮询堆栈状态 - 未使用(可用)内存

我们怎样才能获得这些信息?我想这是依赖于操作系统的,我正在运行Windows所以我的问题是指Windows API.

是否有任何函数可以为我们做 - 为调用线程获取剩余的堆栈内存?

或者,如果我们能够找到以下详细信息,我们将能够自行计算:

  1. 获取线程堆栈基址.必须有一些函数将线程标识符作为参数,并返回一些有关它的信息(例如...堆栈基址?)
  2. 获取线程堆栈大小.如果线程是由我们启动的,我们就可以知道它(因为我们在调用时指定了它CreateThread).但是如果它是主要线程,它是由操作系统为我们的程序启动的,或者我们没有明确启动的任何其他线程,我们如何找到它?
  3. 获取当前堆栈指针.嗯,那更容易.我们可以检查它esp,或者获取局部变量的地址,以获得一个接近的位置.

这是出于教育目的,但我想它可以用来阻止递归算法导致堆栈溢出 - 而不是使用任何最大深度限制功能.

c windows winapi stack

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

android andengine的例子

我正在玩结帐...

[1] http://code.google.com/p/andengineexamples/source/checkout

我已经检查了项目等,但它似乎几乎都在寻找一个lib,因为很多导入似乎都被打破了.

有没有人曾经导入或写过关于它的博客文章?我在[2] http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html的链接上得到了不同的结果,我在网上看到这根本不是一个好主意.使用lib已经过时了.

如何导入缺少的类?

或者更好的是,任何人都有关于设置andengineexamples的任何其他建议我都是耳朵:)

java android andengine

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

requestLocationUpdates minTime参数用途

我正在创建一个应用程序(用于教育目的),每30分钟记录一次用户的位置,并使用户可以查看地图上的所有位置.我不希望更新频率超过30分钟,但确实如此.

这是我打电话的方式requestLocationUpdates:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,  30 * 60 * 1000,  0, pe);
Run Code Online (Sandbox Code Playgroud)

现在,文档清楚地说:

位置更新之间经过的时间永远不会小于minTime

但我确实在这里看到了一些不同的答案(例如,这个答案).

看起来我无法通过GPS获得更新.GPS图标永远不会关闭,更新率大于1更新/秒.所以我在这里有两个问题:

  1. minTime参数不能实现其目的,甚至不作为提示(是的,提示30分钟更新率导致超过更新一秒......).它做了什么呢?
  2. 还有其他办法吗?我不希望GPS一直启用,因为它会消耗我的电池太快.也许我可以安排每30分钟重复一次的闹钟,并打电话requestSingleUpdate

gps android locationmanager

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

Android - Admob - Loading ad then changing visibility causes problems

Long version: I have an Android game. In each "screen" I'm showing the ads BUT the game screen itself - where you actually play. Now, if you launched the app-game (ad begins to load) and then clicked on "Start" before the ad has finished loading - it won't be shown when it should be (only a little strip of it)

Short version: Calling AdView.loadAd and then calling AdView.setVisibility(View.INVISIBLE) before the ad was received will yield a weird result if we …

android visibility admob

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

用于获取窗口控件的API方法

我在MSDN上搜索了一段时间,找不到它.

实际上,我甚至不知道如何在API中调用控件.他们没有被宣布为"窗口",对吗?(对他们来说没什么好处,我不确定,因为我看到了一个方法似乎可以返回一个控件,但它会返回一个hwnd.)

所以我要说我有一个窗口的句柄.我想收到它的控件(文本框,按钮,复选框......)

有什么方法可以做到这一点?再次,如何在API中调用控件?谢谢你的帮助.

c++ api

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