YANE-Framework Tutorial 1.1.0

examples/thread/src/computationthread.cpp

00001 /***************************************************************************
00002  *                                                                         *
00003  * Copyright (C) 2011 by www.nonlinearmpc.com                              *
00004  *                                                                         *
00005  * Authors:                                                                *
00006  *  Juergen Pannek <juergen.pannek@googlemail.com>                         *
00007  *  Michael Schamel <michael.schamel@uni-bayreuth.de>                      *
00008  *                                                                         *
00009  ***************************************************************************/
00010 
00011 #include <stdlib.h>
00012 #include <time.h>
00013 #include <iostream>
00014 
00015 #include <yane/utils.h>
00016 
00017 #include "computationthread.h"
00018 
00019 using namespace std;
00020 
00021 // Constructor
00022 ComputationThread::ComputationThread ( const std::string & name,
00023         yane::Utils::DebugMaster * dm, yane::Utils::Mutex * mutex, int * sum,
00024         int * iter ) :
00025         yane::Utils::Thread ( name, dm )
00026 {
00027         _mutex = mutex;
00028         _iter = iter;
00029         _sum = sum;
00030 }
00031 
00032 // Destructor
00033 ComputationThread::~ComputationThread ( )
00034 {
00035 }
00036 
00037 // Compute
00038 void ComputationThread::run ( )
00039 {
00040         debugMessage ( "Calculation started", 5 );
00041 
00042         srand ( time ( NULL ));
00043 
00044         while ( true )
00045         {
00046                 // Lock
00047                 _mutex->lock ( );
00048                 debugMessage ( "Thread locked", 6 );
00049 
00050                 // If 10 reached finish thread
00051                 if ( * _iter > 1000 )
00052                 {
00053                         _mutex->unlock ( );
00054                         break;
00055                 }
00056 
00057                 // Compute
00058                 * _sum = * _sum + * _iter;
00059                 * _iter = * _iter + 1;
00060 
00061                 // Unlock
00062                 _mutex->unlock ( );
00063                 debugMessage ( "Thread unlocked", 6 );
00064 
00065                 usleep ( 10000 );
00066         }
00067         debugMessage ( "Calculation finished", 5 );
00068 }