pthread_delay_np()--Delay Thread for Requested Interval


  Syntax:
 #include <pthread.h>
 #include <time.h>
 int pthread_delay_np(const struct timespec *deltatime);
  Service Program Name: QP0WPTHR

  Default Public Authority: *USE

  Threadsafe: Yes

  Signal Safe: Yes

The pthread_delay_np() function causes the calling thread to delay for the deltatime specified.

Although time is specified in seconds and nanoseconds, the system has approximately millisecond granularity. Due to scheduling and priorities, the amount of time you actually wait might be slightly more or less than the amount of time specified.

During the time that the thread is blocked in pthread_delay_np(), any asynchronous signals that are delivered to the thread have their actions taken. After the signal action (such as running a signal handler), the wait resumes if the specified interval has not yet elapsed.

The pthread_delay_np() function is a cancellation point.

Note:This function is not portable.


Authorities and Locks

None.


Parameters

interval
(Input) Address of the timespec structure containing the interval to wait

Return Value

0
pthread_delay_np() was successful.

value
pthread_delay_np() was not successful. value is set to indicate the error condition.

Error Conditions

If pthread_delay_np() was not successful, the error condition returned usually indicates one of the following errors. Under some conditions, the value returned could indicate an error other than those listed here.

[EINVAL]

The value specified for the argument is not correct.


Related Information


Example

See Code disclaimer information for information pertaining to code examples.

#define _MULTI_THREADED
#include <stdio.h>
#include <qp0z1170.h>
#include <time.h>
#include <pthread.h>
#include "check.h"

#define NTHREADS                 5

void *threadfunc(void *parm)
{
  int               rc;
  struct timespec   ts = {0, 0};

  /* 5 and 1/2 seconds */
  ts.tv_sec  = 5;
  ts.tv_nsec = 500000000;

  printf("Thread blocked\n");
  rc = pthread_delay_np(&ts);
  if (rc != 0) {
    printf("pthread_delay_np() - return code %d\n", rc);
    return (void*)&rc;
  }
  printf("Wait timed out!\n");

  return NULL;
}

int main(int argc, char **argv)
{
  int                   rc=0;
  int                   i;
  pthread_t             threadid[NTHREADS];
  void                 *status;
  int                   fail=0;

  printf("Enter Testcase - %s\n", argv[0]);

  printf("Create %d threads\n", NTHREADS);
  for(i=0; i<NTHREADS; ++i) {
    rc = pthread_create(&threadid[i], NULL, threadfunc, NULL);
    checkResults("pthread_create()\n", rc);
  }

  printf("Wait for threads and cleanup\n");
  for (i=0; i<NTHREADS; ++i) {
    rc = pthread_join(threadid[i], &status);
    checkResults("pthread_join()\n", rc);
    if (status != NULL) {
      fail = 1;
    }
  }

  if (fail) {
    printf("At least one thread failed!\n");
    exit(1);
  }
  printf("Main completed\n");
  return 0;
}

Output:

Enter Testcase - QP0WTEST/TPDLY0
Create 5 threads
Thread blocked
Thread blocked
Thread blocked
Thread blocked
Wait for threads and cleanup
Thread blocked
Wait timed out!
Wait timed out!
Wait timed out!
Wait timed out!
Wait timed out!
Main completed


API introduced: V4R3
Top | Pthread APIs | APIs by category