簡體   English   中英

從主循環訪問線程變量-C ++-Windows

[英]access to a thread variable from main loop - c++ - windows

我對線程的概念是全新的。

我必須使用線程從我的主程序中的相機更新一些cv :: mat變量。

我只知道線程意味着共享變量的問題:/

所以我認為我不能在我的主線程和線程中都使用通用變量

我正在使用

    #include <thread> 

這是我的線程fct:

    void MyThreadFunction()
    {
        cv::Mat a;
        cv::Mat b;

        while (1)
        {
            capture_L.read(a);
            capture_R.read(b);
        }

    }

在進入主循環(用於渲染)之前,我先調用它。 因此,我的目標是訪問主函數中的a和b。 我怎樣才能做到這一點?

實際上,如果您從多個線程訪問ab變量,將存在相互排斥的問題。 這可以通過使用mutex來解決。 您需要在讀取和/或寫入變量之前先lock互斥鎖,然后再對其進行unlock 這可以通過lock_guard完成。

您可以這樣做:

#include <mutex>
#include <thread>

void MyThreadFunction(mutex& m, cv::Mat& a, cv::Mat& b)
{
    while (1)
    {
        [ ... ]

        {
          lock_gard<mutex> l(m);
          capture_L.read(a);
          capture_R.read(b);
        }
    }

}

int main()
{
  mutex m;
  cv::Mat a, b;

  thread t(MyTjreadFunction, ref(m), ref(a), ref(b));

  {
     lock_gard<mutex> l(m);
     [ ... access a & b ... ]
  }

  t.join();

  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM