Recommended

Multicore community

 

Articles

Intel.com

Microsoft.co.il

 

Community

Microsoft Forums

Intel's Forum

Intel's Multicore Community

 

Resources

http://msdn.com/concurrency

Intel Multicore

NVidia Multicore GPU

 

Downloads

.Net Parallel Extensions

Intel's TBB

WinModules   

 

Tools

AsyncOp Logger

Intel thread analysis

Intel VTune

 

Contact

Asaf Shelly

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ichilov

-->

 

 

 

 

 

 
2 / 1
 
 
 
 
 
 
 
    // /  This HTML file was produced by the ProjectPublisher WebService, By Asaf Shelly                   / //
   // /    WebService URL is: http://Services.AsyncOp.com/ProjectPublisher/ProjectPublisherWSvc.asmx      / //
  // /    Learn more and find the source code here: http://AsyncOp.com                                   / //


// PhaseStateTest00.cpp : Defines the entry point for the console application.
//

#include <Windows.h>
#include <StdIO.h>
#include <ConIO.h>

#include "LoggerAPI.h"
#include "State_Simulation.h"





////////////////////////////////////////
///
// BUFFER OBJECT


class CommBuffer: public State_Simulation
{
private:
   static DWORD WINAPI GarbageCollector(CommBuffer* pCommBuffer);
public:
   char Buffer[1024];
   CommBuffer();
};


CommBuffer::CommBuffer(): State_Simulation(5000, "Communication Buffer")
{
   CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)CommBuffer::GarbageCollector,this,0,0);
   SetState(1);
}


DWORD WINAPI CommBuffer::GarbageCollector(CommBuffer* pCommBuffer)
{
   pCommBuffer->WaitState(CAN_DISPOSE);
   // do some cleanup
   memset(pCommBuffer->Buffer,0,sizeof(pCommBuffer->Buffer));
   Sleep(23);
   delete pCommBuffer;
   return(0);
}







////////////////////////////////////////
///
// APPLICATION THREADS



DWORD WINAPI ReadSocket(CommBuffer* pCommBuffer)
{
   pCommBuffer->WaitState(1);
   // pretend to read from socket
   for (int i=0;i<1024;i++)
      pCommBuffer->Buffer[i] = i;
   Sleep(1500);
   pCommBuffer->SetState(2);
   return(0);
}


DWORD WINAPI SaveFile(CommBuffer* pCommBuffer)
{
   pCommBuffer->WaitState(3);
   // pretend to write to file
   for (int i=0;i<1024;i++)
      Sleep(((unsigned char)pCommBuffer->Buffer[i])%5);
   pCommBuffer->SetState(CommBuffer::CAN_DISPOSE);
   return(0);
}


DWORD WINAPI ParseBuffer(CommBuffer* pCommBuffer)
{
   pCommBuffer->WaitState(2);
   // do some work with the buffer
   for (int i=0;i<1024;i++)
   {
      if (i==pCommBuffer->Buffer[i]) { pCommBuffer->Buffer[i] = (pCommBuffer->Buffer[i]*57-3)*pCommBuffer->Buffer[i/3]; }
   }
   pCommBuffer->SetState(3);
   return(0);
}






////////////////////////////////////////
///
// MAIN THREAD


int main(int argc, char* argv[])
{
   Log("Main","Creating Object");
   CommBuffer* pCommBuffer=new CommBuffer;

   Log("Main","Creating Threads");
   CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&ReadSocket,pCommBuffer,0,0);
   CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&ParseBuffer,pCommBuffer,0,0);
   CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&SaveFile,pCommBuffer,0,0);

   Log("Main","Waiting for communication to complete");
   pCommBuffer->WaitState(3);

   Log("Main","Back to work");
   getch();

   return(0);
}











////////////////////////////////////////
///
// LOG HELPER

void Log(char* obj, char* info)
{
   char str[256];
   sprintf(str,"[ %s ] : \"%s\"\n", obj, info);
   OutputDebugString(str);
}

void Log(char* obj, char* info, int val)
{
   char str[256];
   sprintf(str,"[ %s ] : \"%s\" - %i\n", obj, info, val);
   OutputDebugString(str);
}