Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#解频指针要求每次迭代睡眠1毫秒_C#_Pointers_Thread Sleep - Fatal编程技术网

C#解频指针要求每次迭代睡眠1毫秒

C#解频指针要求每次迭代睡眠1毫秒,c#,pointers,thread-sleep,C#,Pointers,Thread Sleep,我正在编写一个方法,该方法迭代图像的像素并返回每列的总和。图像作为一个指针数组传入,该数组将被消除差异并求和。奇怪的是,如果我简单地遍历,每个求和列的值返回255000(可能是最大值),但是,如果我加上一毫秒的睡眠,数组就会有正确的非最大值 private unsafe int[] SumEachColumn(SharedImg camera, Cvb.Image.VPAEntry* pVPAT, IntPtr pbase, int startsumposx =0, int endsumpos

我正在编写一个方法,该方法迭代图像的像素并返回每列的总和。图像作为一个指针数组传入,该数组将被消除差异并求和。奇怪的是,如果我简单地遍历,每个求和列的值返回255000(可能是最大值),但是,如果我加上一毫秒的睡眠,数组就会有正确的非最大值

private unsafe int[] SumEachColumn(SharedImg camera, Cvb.Image.VPAEntry*  pVPAT, IntPtr pbase, int startsumposx =0, int endsumposx = 300)
{
    int[] horsum = new int[endsumposx - startsumposx];
    byte* pImageLine;
    for (int y = 0; y < Image.ImageHeight(camera); y++)
    {
        pImageLine = (byte*)(pbase.ToInt64() + pVPAT[y].YEntry.ToInt64());
        for (int x = startsumposx; x<endsumposx; x++)
        {
            horsum[x] += (byte)(255 - *(pImageLine + pVPAT[x].XEntry.ToInt64()));
        }
        //Thread.Sleep(1); //when commented horsum returns 255000 in each cell, when uncommented, returns values ranging from 1500-255000
    }
    return horsum;
}
private unsafe int[]SumEachColumn(共享DIMG摄像头,Cvb.Image.VPAEntry*pVPAT,IntPtr pbase,int startsumposx=0,int endsumposx=300)
{
int[]horsum=newint[endsumposx-startsumposx];
字节*pImageLine;
对于(int y=0;y对于(int x=startsumposx;xa您是否在一个线程上运行此程序,而另一个线程可能正在写入相同的图像数据?您是否确定这是您得到的值,您是否看到它带有断点或其他内容?如果您的图像在查看时完全是黑色的,这是因为如果您不等待一小段时间,图像将不会被引用resh,您将看到一个黑色图像add
GC.KeepAlive(null)
而不是睡眠。如果这是一个JIT错误,那么任何意外的函数调用都会产生相同的效果。但是,由于您在这里处理摄像头,这可能只是一个竞争条件。@Dimitri Mockelyn这肯定是我得到的值,我是通过在return语句之前创建一个断点并“监视”找到的变量。你给另一个线程时间用有效数据填充图像。当你开始时,你可能有一个竞态条件,你在这里发布的代码在另一个线程从相机接收到图像并将其存储到位之前运行,因此你看到的一切都是白色的,因此是最大和。你正在运行t吗他在一个线程上,另一个线程可能正在写入相同的图像数据?你确定这是你得到的值吗,你是否看到它带有断点或其他东西?如果你的图像在查看时完全是黑色的,那是因为如果你不等待一小段时间,图像将不会刷新,并且你会看到一个黑色的imageAdd
GC.KeepAlive(空)
而不是睡眠。如果这是一个JIT错误,那么任何意外的函数调用都会产生相同的效果。但是,由于您在这里处理摄像头,这可能只是一个竞争条件。@Dimitri Mockelyn这肯定是我得到的值,我是通过在return语句之前创建一个断点并“监视”找到的变量。你给另一个线程时间用有效数据填充图像。当你开始时,你可能有一个竞态条件,你在这里发布的代码在另一个线程从相机接收到图像并将其存储到位之前运行,因此你看到的一切都是白色的,因此是最大和。