From 24d6ec0750afd0c393bab09aabe174da824a8c56 Mon Sep 17 00:00:00 2001 From: marha Date: Thu, 18 Feb 2010 07:22:26 +0000 Subject: svn merge --reintegrate ^/branches/mhmake.parallel . --- tools/mhmake/src/commandqueue.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tools/mhmake/src/commandqueue.h (limited to 'tools/mhmake/src/commandqueue.h') diff --git a/tools/mhmake/src/commandqueue.h b/tools/mhmake/src/commandqueue.h new file mode 100644 index 000000000..54a22e98e --- /dev/null +++ b/tools/mhmake/src/commandqueue.h @@ -0,0 +1,40 @@ +#ifndef __COMMANDQUEUE_H__ +#define __COMMANDQUEUE_H__ + +#include "fileinfo.h" + +class commandqueue +{ + struct activeentry + { + refptr pTarget; + vector::iterator CurrentCommandIt; + string Command; + md5_context md5ctx; + bool IgnoreError; + }; +private: + queue< refptr > m_Queue; + unsigned m_MaxNrCommandsInParallel; + HANDLE *m_pActiveProcesses; + activeentry *m_pActiveEntries; + unsigned m_NrActiveEntries; + +private: + void ThrowCommandExecutionError(activeentry *pActiveEntry); + void RemoveActiveEntry(unsigned Entry); + bool StartExecuteCommands(const refptr &pTarget); + bool StartExecuteNextCommand(activeentry *pActiveEntry, HANDLE *pActiveProcess); + void TargetBuildFinished(activeentry *pActiveEntry); + +public: + commandqueue(); + ~commandqueue(); + + bool QueueTarget(const refptr &pTarget); // Returns true if target has been queued, false when commands are executed upon return + mh_time_t WaitForTarget(const refptr &pTarget); + void SetNrParallelBuilds(unsigned NrParallelBuilds); +}; + + +#endif -- cgit v1.2.3