当前位置: 首页 > 工具软件 > pSOS > 使用案例 >

pSOS&Win32--系统调用封装-任务管理(2): 开始 重起 挂起

太叔景同
2023-12-01

 INT32 _StartTask( UINT32 tid, INT32 mode, INT32 (CALLBACK* start_addr)(void*), void* targs )
{
#ifdef WIN32 /* For WIN32 */
#ifndef REENTRANT
 if( (threadHdl = (HANDLE)_beginthreadex(
  NULL,
  ustack,
  start_addr,
  targs,
  0,
  &threadid
  )) > 0 ) {
  return NORMAL;
 }
#else
 if( (threadHdl = CreateThread(
  (LPSECURITY_ATTRIBUTES)NULL,
  ustack,
  start_addr,
  targs,
  0,
  &threadid
  )) != NULL ) {
  return NORMAL;
 }
#endif /* REENTRANT End. */
 else {
#ifdef _DEBUG
  return _ErrorOut( GetLastError(), "_StartTask" );
#else
  return GetLastError();   
#endif
 }
#else /* For pSOS */
 INT32 sts;
 UINT32 args[4];
 
 args[0] = (UINT32)targs;
 
/* t_start
   
开始一个新任务。
*/
sts = t_start(
  tid,
  mode,
  (void (*)())start_addr,
  (ULONG*)args
 );
#ifdef _DEBUG
 if( sts ) {
  _ErrorOut( sts, "_StartTask" );
 }
#endif
 return sts;
#endif /* WIN32 End. */
}

INT32 _RestartTask( UINT32 tid, void* targs )
{
#ifdef WIN32 /* For WIN32 */
 return NORMAL;
#else /* For pSOS */
 INT32 sts;
/*t_restart
   
重新起动一个任务。
*/
 sts = t_restart(
  tid,
  (ULONG*)targs
  );
#ifdef _DEBUG
 if( sts ) {
  return _ErrorOut( sts, "_RestartTask" );
 }
#endif
 return sts;
#endif /* WIN32 End. */
}

INT32 _SuspendTask( UINT32 tid )
{
#ifdef WIN32 /* For WIN32 */
 INT32 pSuspendCount;

 pSuspendCount = SuspendThread( threadHdl );
 if( pSuspendCount == 0xFFFFFFFF ) {
#ifdef _DEBUG
  return _ErrorOut( GetLastError(), "_SuspendTask" );
#else
  return GetLastError();   
#endif
 }
 return NORMAL;
#else /* For pSOS */
 INT32 sts;

/*t_suspend
   
挂起一个任务。
*/
 sts = t_suspend(
  tid
  );
#ifdef _DEBUG
 if( sts ) {
  return _ErrorOut( sts, "_SuspendTask" );
 }
#endif
 return sts;
#endif /* WIN32 End. */
}

 类似资料: