Ejemplo n.º 1
0
TASK_DLLEXPORT TaskMessage *
Task_peekMessage(void)
{
   pth_t ptask;

   Task *task;

   pth_msgport_t selfPort = NULL;

   char msgPortName[10];

#ifdef _LDEBUG
   printf("F=%s,L=%d\n", __FILE__, __LINE__);
#endif
   if (!pth_inited)
      return NULL;
   ptask = pth_self();
   task = seach_task_in_list(&Tasks, ptask);
   if (task == NULL)
      return NULL;
   snprintf(msgPortName, 10, "%ld", task->id);
   selfPort = pth_msgport_find(msgPortName);
   if (selfPort == NULL)
      return NULL;
   if (pth_msgport_pending(selfPort))
      return Task_getMessage();

   Task_yield();
#ifdef _LDEBUG
   printf("F=%s,L=%d\n", __FILE__, __LINE__);
#endif
   return NULL;
}
Ejemplo n.º 2
0
void FrSimThreadEvent::wait()
{
  pth_wait(ev);
  
//  pth_status_t status = pth_event_status(ev);
//  std::cout << "wait returned ";
//  if (status == PTH_STATUS_PENDING) {
//  	std::cout << "PENDING" << std::endl;
//  } else if (status == PTH_STATUS_OCCURRED) {
//  	std::cout << "OCCURED" << std::endl;
//  } else if (status == PTH_STATUS_FAILED) {
//  	std::cout << "FAILED" << std::endl;
//  }
  
//  std::cout << "waiting for " << pth_msgport_pending(msgPrt) << std::endl;
  int i = 0;
  while (pth_msgport_pending(msgPrt) != 0) {
  	pth_msgport_get(msgPrt);
//  	std::cout << "now waiting for " << pth_msgport_pending(msgPrt) << std::endl;
  	i++;
  	if (i == 10)
  		std::exit(1);
  }
}