Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 619665
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T18:40:48+00:00 2026-05-13T18:40:48+00:00

I have a loop to take in images from a high speed framegrabbger at

  • 0

I have a loop to take in images from a high speed framegrabbger at 250fps.

/** Loop processes 250 video frames per second **/
while(1){
  AcquireFrame();
  DoProcessing();
  TakeAction();
}

At the same time, I would like the user to be able to monitor what is going on. The user only needs to see images at around 30 fps (or less). How do I set up a second thread that displays the current frame every so often?

Thread(){
  cvShowImage();
  Wait(30); /** Wait for 30 ms **/
}

I am on Windows on a quad core Intel machine using MinGW, gcc and OpenCV 1.1. The main criteria is that the display thread must take as little time away from my main processing loop as possible. Every millisecond counts.

I have tried using CreateThread() to create a new thread with cvShowImage() and cvWaitKey() but apparently those functions are not threadsafe.

I am considering using OpenMP, but some people report problems with OpenMP and OpenCV. I also am considering trying to use DirectX directDraw because apparently it is very fast. but it looks complicated and evidentally there are problems using Windows DLL’s with MinGw.

Which of these avenues would be the best place to start?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T18:40:48+00:00Added an answer on May 13, 2026 at 6:40 pm

    Ok. So embarrassingly my question is also its own answer.

    Using CreateThread(), CvShowImage() and CvWaitKey() as described in my question actually works– contrary to some postings on the web which suggest otherwise.

    In any event, I implemented something like this:

    /** Global Variables **/
    bool DispThreadHasFinished;
    bool MainThreadHasFinished;
    iplImage* myImg;
    
    /** Main Loop that loops at >100fps **/
    main() {
      DispThreadHasFinished = FALSE;
      MainThreadHasFinished = FALSE;
      CreateThread(..,..,Thread,..);
    
      while( IsTheUserDone() ) {
        myImg=AcquireFrame();
        DoProcessing();
        TakeAction();
      }
      MainThreadHasFinished = TRUE;
    
      while ( !DisplayThreadHasFinished ) {
         CvWaitKey(100);
      }
    
      return;
    }
    
    /** Thread that displays image at ~30fps **/
    Thread() {
      while ( !MainThreadHasFinished ) {
        cvShowImage(myImg);
        cvWaitKey(30);
      }
    DispThreadHasFinished=TRUE;
    return;
    }
    

    When I originally posted this question, my code was failing for unrelated reasons. I hope this helps!

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have the need to take the results of a query per line item
I have an object that is updated from a polling loop on a thread.
I have a loop that reads each line in a file using getline() :
I have a loop on page to update an access database that takes 15-20
In my WPF client, I have a loop that calls a WCF service to
I have following foreach-loop: using System.IO; //... if (Directory.Exists(path)) { foreach(string strFile in Directory.GetFiles(path,
If I have a for loop which is nested within another, how can I
If you have a for loop such as: For Each s As String In
In Java 5 and above you have the foreach loop, which works magically on
I'm trying to solve the 3n+1 problem and I have a for loop that

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.