This content is not available in your preferred language.

The content is shown in another available language. Your browser may include features that can help translate the text.

How to Cause a LabWindows™/CVI™ Process or Thread to Pause Execution?

Updated Jan 11, 2024

Reported In

Software

  • LabWindows/CVI Base
  • LabWindows/CVI Full

Issue Details

Using the LabWindows™/CVI Delay function causes CPU utilization to go to 100%. Is there a better way to cause a LabWindows/CVI process/thread to pause execution?

Solution

In a LabWindows/CVI application in which you want to pause execution of the current thread, but do not want system performance degraded by 100% CPU utilization, the Windows SDK Sleep() function is the best choice.

 

Additional Information

When you call the LabWindows/CVI Delay (double Number_of_Seconds) function, LabWindows/CVI waits for the specified number of seconds before executing the next line of code. However, this is a "busy wait" loop in which the CPU is utilized 100%.

On the other hand, the Windows SDK includes the Sleep(long dwMilliseconds) function, which suspends the execution of the current thread for a specified number of milliseconds. This yields the CPU to other threads and processes, so the current LabWindows/CVI application thread does not tie up the computer's CPU.

You can demonstrate this behavior by running the following sample code as a LabWindows/CVI console application. On the test machine (Pentium III 1GHz, 256MB RAM), the CPU utilization was at 100% during the Delay(0.01 sec) function and at about 10% during the Sleep(10 ms) function:

#include <windows.h>
#include <ansi_c.h>
#include <utility.h>

int main (int argc, char *argv[])
{
   int i=0;

   printf("delaying 10ms (watch CPU)...\n");
   for (i=0; i<1000; i++) {
      Delay(0.01);
   }

   printf("sleeping 10ms (watch CPU)...\n");
   for (i=0; i<1000; i++) {
      Sleep(10);
   }

   return 0;
}