【问题标题】:Running two loops in Parallel并行运行两个循环
【发布时间】:2012-10-08 07:03:06
【问题描述】:

我正在研究一种视频流算法。我已将整个视频分成一组图像。现在每个图像都将根据时间进行流式传输(Image.TimeInMs 表示图像流式传输或发送的时间)。为了保持时间我有System.Timer.Timer 对象。

_timer = new System.Timers.Timer(250);
_timer.Elapsed += new ElapsedEventHandler(timeCounterIncrementer);
_timer.Enabled = true;

for( i =0; i<imageArray.length;i++)
{
    while (timeCounter < imageArray[i].TimeInMs)
    {                          
        StreamImage();
    }
}

void timeCounterIncrementer(object sender, ElapsedEventArgs e)
{
    timeCounter+=250;            
}

在上面的代码中当while循环运行时定时器方法timeCounterIncrementer不会执行。我希望计时器方法一方面运行,另一方面运行 While 循环。换句话说,如何并行运行 while 循环和计时器方法?

【问题讨论】:

  • 您可以使用线程并同步胎面吗?
  • 我可以使用线程但不能同步。由于 while 循环和计时器都必须在其视频流上并行执行,因此时间准确性是主要要求。计时器值应与视频播放器的滑块值一致

标签: c# parallel-processing


【解决方案1】:

最近我遇到了一个类似的问题。至少我使用Task Parallelism (Task Parallel Library) 修复了它,因为线程对我来说是 2 hard :)

如果您完成将两个循环分成方法,您可以并行调用这两个方法,如下所示:

Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());

【讨论】:

  • 即使我尝试过这种方法,我也将 while 循环段放在一个方法中,然后将其称为 task1,然后我将 _timer.start() 称为 task2。但它没有工作:(
  • 什么不起作用?您对会发生什么,甚至是并行调用的期望?
  • 我使用了 Parallel.Invoke(() => task1, () => task2);两个调用都执行,但它们不是并行的。我想因为我有一个计时器对象,它每 250 毫秒调用一个方法,并且这个方法不能使用 Parallel.Invoke 执行。如果是两个不同的循环,那么这种技术对我有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
相关资源
最近更新 更多