Exemplo n.º 1
0
CJob *CJobManager::GetNextJob(const CJobWorker *worker)
{
  CSingleLock lock(m_section);
  while (m_running)
  {
    // grab a job off the queue if we have one
    CJob *job = PopJob();
    if (job)
      return job;
    // no jobs are left - sleep for 30 seconds to allow new jobs to come in
    lock.Leave();
    bool newJob = m_jobEvent.WaitMSec(30000);
    lock.Enter();
    if (!newJob)
      break;
  }
  // ensure no jobs have come in during the period after
  // timeout and before we held the lock
  CJob *job = PopJob();
  if (job)
    return job;
  // have no jobs
  RemoveWorker(worker);
  return NULL;
}
Exemplo n.º 2
0
//
// Removing manager indicated by index from the display.
// Update managers with indexes greater than the one removed.
// This function must be called before removing the manager from 
// the manager list.
//
void CWorkerView::RemoveManager(Manager * manager)
{
	HTREEITEM hworker, hmanager;

	hmanager = GetManager(manager);
	// Remove the manager's workers and associated net clients.
	while (hworker = m_TWorkers.GetChildItem(hmanager)) {
		RemoveWorker((Worker *) m_TWorkers.GetItemData(hworker));
	}

	// Remove the indicated manager from the display.
	m_TWorkers.DeleteItem(hmanager);
	m_TWorkers.RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_UPDATENOW | RDW_ERASE);
	theApp.pView->m_pPageNetwork->RemoveManager(manager);

	// Remove the indicated manager from memory.
	theApp.manager_list.RemoveManager(manager->GetIndex());
}
Exemplo n.º 3
0
//
// Removing the selected item from the GUI.
//
void CWorkerView::RemoveSelectedItem()
{
	// Removing selected manager or worker.
	// First make sure that a manager or worker was selected.
	switch (selected_type) {
	case IOERROR:
		break;
	case ALL_MANAGERS:
		theApp.manager_list.RemoveAllManagers();
		break;
	case MANAGER:
		RemoveManager(GetSelectedManager());
		break;
	case WORKER:
		RemoveWorker(GetSelectedWorker());
		break;
	}
}
Exemplo n.º 4
0
//
// Remove worker from indicated manager.  Update indexes for other
// workers.  This function must be called before removing the worker
// from the list of workers.
//
void CWorkerView::RemoveWorker(Worker * worker)
{
	// Get the worker tree item.
	HTREEITEM hworker = GetWorker(worker);

	// If removing a server with an active partner, remove partner as well.
	if (IsType(worker->Type(), GenericServerType) && worker->net_partner) {
		// Call RemoveWorker recursively to remove the NetClient from the GUI.
		RemoveWorker(worker->net_partner);
	}
	// Remove the indicated worker from memory.
	worker->manager->RemoveWorker(worker->GetIndex());

	// Remove the indicated worker from the display.
	m_TWorkers.DeleteItem(hworker);
	m_TWorkers.RedrawWindow();

	// Reset the results display tab to its initial state.
	theApp.pView->m_pPageDisplay->Reset();
}