/**
 * @file
 * $Id$
 * $Revision$
 * $Author$
 * $Date$
 *
 * This file is part of The iWear Framework.
 * In particular this file is part of the Framework Context Library
 *
 * The iWear Framework is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by the
 * Free Software Foundation as in version 2 of the License.

 * 
 * The iWear Framework is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * The iWear Framework; if not, write to the Free Software Foundation, Inc., 59
 * Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __CONTEXTCHANGEDTHREAD_H
#include <iwear-context/contextchangedthread.h>
#endif

#ifndef __CONTEXTMANAGER_H
#include <iwear-context/contextmanager.h>
#endif

namespace iwear{
namespace context{
    ContextChangedThread::ContextChangedThread(ContextManager* context_manager, EventDispatcher& ed)
	: Thread(ed), context_manager(context_manager), stopped(false)
    {
	if(context_manager == NULL){
	    // TODO: set some invalid state --> implement this as a Service 
	}
    }

    

    void ContextChangedThread::Run(void){
	while(!stopped){
	    while(context_manager->get_changed_atomics_size() > 0){
		AtomicContext* ac = context_manager->pop_changed_atomic();
		context_manager->atomic_context_changed(ac);
	    }
	    // sleep 1/10 sec
	    usleep(100000);
	    TestCancel();
	}
    }
} // namespace context
} // namespace iwear
