Jump to content

DosResumeThread: Difference between revisions

From EDM2
Created page with "==Description== Restarts a thread that was previously stopped with DosSuspendThread. ==Syntax== <PRE> #define INCL_DOSPROCESS #include <os2.h> TID tid; /* Thread id..."
 
Ak120 (talk | contribs)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Description==
Restarts a thread that was previously stopped with DosSuspendThread.
Restarts a thread that was previously stopped with DosSuspendThread.


==Syntax==
==Syntax==
<PRE>
DosResumeThread (tid)
#define INCL_DOSPROCESS
#include <os2.h>


TID       tid;  /*  Thread identifier of the resumed thread. */
==Parameters==
APIRET    ulrc;  /*  Return Code. */
;tid ([[TID]]) - input: Thread identifier of the resumed thread.


ulrc = DosResumeThread(tid);
</PRE>
==Parameters==
;  tid (TID) - input : Thread identifier of the resumed thread.
==Return Code==
==Return Code==
ulrc (APIRET) - returns
;ulrc (APIRET) - returns: DosResumeThread returns one of the following values:
 
* 0 NO_ERROR
DosResumeThread returns one of the following values:
* 90 ERROR_NOT_FROZEN
 
*309 ERROR_INVALID_THREADID
* 0         NO_ERROR  
* 90       ERROR_NOT_FROZEN  
* 309       ERROR_INVALID_THREADID


==Remarks==
==Remarks==
Line 28: Line 17:


==Example Code==
==Example Code==
This example creates a new thread within a process, sleeps for 1 second, suspends the thread for 5 seconds, and then waits for the thread to terminate.
{{OS2API Example Thread}}
 
Compile this example with MULTITHREAD LIBRARIES. If you are using CSet/2, use the /Gm+ switch.
<PRE>
#define INCL_DOSPROCESS    /* Process and thread values */
#define INCL_DOSERRORS      /* DOS error values          */
#include <os2.h>
#include <stdio.h>


void _System CntThreadProc(ULONG LoopMax);  /* Count Thread */
int main(VOID) {
  TID        tidCntThread = 0;    /* ID returned for newly created thread */
  PFNTHREAD  pfnCntThread = &CntThreadProc; /* Address of thread program  */
  ULONG      ulThreadParm = 100;        /* Parameter to thread routine    */
  APIRET      rc          = NO_ERROR;  /* Return code                    */
  rc = DosCreateThread(&tidCntThread,  /* Thread ID (returned by function)  */
                        pfnCntThread,  /* Address of thread program        */
                        ulThreadParm,  /* Parameter passed to ThreadProc    */
                        CREATE_READY |  /* Thread is ready when created      */
                        STACK_SPARSE,  /* Do not pre-commit stack pages    */
                        8192L);        /* Stack size, rounded to page bdy  */
  if (rc != NO_ERROR) {
      printf("DosCreateThread error: return code = %u\n", rc);
      return 1;
  }
  rc = DosSleep (1000);  /* Sleep for a second to allow thread to run a bit */
  rc = DosSuspendThread (tidCntThread);
  if (rc != NO_ERROR) {
      printf("DosSuspendThread error: return code = %u\n", rc);
      return 1;
  }
  rc = DosSleep (5000);  /* Sleep 5 seconds before resuming the thread    */
  rc = DosResumeThread (tidCntThread);
  if (rc != NO_ERROR) {
      printf("DosResumeThread error: return code = %u\n", rc);
      return 1;
  }
  rc = DosWaitThread (&tidCntThread, DCWW_WAIT);
  if (rc != NO_ERROR) {
      printf ("DosWaitThread error : return code = %u\n", rc);
  }
  printf ("Thread has completed!\n");
  return NO_ERROR;
}
void _System CntThreadProc(ULONG LoopMax )  /* Count thread */
{
  ULONG i = 0;                /* Loop index */
  for (i=0;i < LoopMax;i++ ) {
      printf ("%d\n", i);
  }
  return;
}
</PRE>
==Related Functions==
==Related Functions==
* [[OS2 API:CPI:DosCreateThread|DosCreateThread]]
* [[DosCreateThread]]
* [[OS2 API:CPI:DosQueryThreadContext|DosQueryThreadContext]]
* [[DosQueryThreadContext]]
* [[OS2 API:CPI:DosSuspendThread|DosSuspendThread]]
* [[DosSuspendThread]]
 


[[Category:The OS/2 API Project]]
[[Category:Dos]]

Latest revision as of 17:13, 15 January 2019

Restarts a thread that was previously stopped with DosSuspendThread.

Syntax

DosResumeThread (tid)

Parameters

tid (TID) - input
Thread identifier of the resumed thread.

Return Code

ulrc (APIRET) - returns
DosResumeThread returns one of the following values:
  • 0 NO_ERROR
  • 90 ERROR_NOT_FROZEN
  • 309 ERROR_INVALID_THREADID

Remarks

If the thread is not in a suspended state when you issue DosResumeThread for it, ERROR_NOT_FROZEN is returned.

Example Code

This example creates a new thread within a process, sleeps for 1 second, suspends the thread for 5 seconds, and then waits for the thread to terminate.

Compile this example with MULTITHREAD LIBRARIES. If you are using C Set/2, use the /Gm+ switch.

#define INCL_DOSPROCESS     /* Process and thread values */
#define INCL_DOSERRORS      /* DOS error values          */
#include <os2.h>
#include <stdio.h>

void _System CntThreadProc(ULONG LoopMax); /* Count Thread */

int main(VOID) {
   TID         tidCntThread = 0;     /* ID returned for newly created thread */
   PFNTHREAD   pfnCntThread = &CntThreadProc; /* Address of thread program   */
   ULONG       ulThreadParm = 100;        /* Parameter to thread routine     */
   APIRET      rc           = NO_ERROR;   /* Return code                     */

   rc = DosCreateThread(&tidCntThread,  /* Thread ID (returned by function)  */
                        pfnCntThread,   /* Address of thread program         */
                        ulThreadParm,   /* Parameter passed to ThreadProc    */
                        CREATE_READY |  /* Thread is ready when created      */
                        STACK_SPARSE,   /* Do not pre-commit stack pages     */
                        8192L);         /* Stack size, rounded to page bdy   */
   if (rc != NO_ERROR) {
      printf("DosCreateThread error: return code = %u\n", rc);
      return 1;
   }
   rc = DosSleep (1000);  /* Sleep for a second to allow thread to run a bit */

   rc = DosSuspendThread (tidCntThread);
   if (rc != NO_ERROR) {
      printf("DosSuspendThread error: return code = %u\n", rc);
      return 1;
   }
   rc = DosSleep (5000);  /* Sleep 5 seconds before resuming the thread     */

   rc = DosResumeThread (tidCntThread);
   if (rc != NO_ERROR) {
      printf("DosResumeThread error: return code = %u\n", rc);
      return 1;
   }
   rc = DosWaitThread (&tidCntThread, DCWW_WAIT);
   if (rc != NO_ERROR) {
      printf ("DosWaitThread error : return code = %u\n", rc);
   }
   printf ("Thread has completed!\n");
   return NO_ERROR;
}

void _System CntThreadProc(ULONG LoopMax )  /* Count thread */
{
   ULONG i = 0;                 /* Loop index */
   for (i=0;i < LoopMax;i++ ) {
      printf ("%d\n", i);
   }
   return;
}

Related Functions