57 lines
1.4 KiB
C++
57 lines
1.4 KiB
C++
#include "compileconfig.h"
|
|
#include "parsermanager.h"
|
|
|
|
#include <process.h>
|
|
|
|
/*!
|
|
the function for the second thread
|
|
*/
|
|
//DWORD WINAPI CalculationsProcedure(LPVOID lpParameter)
|
|
unsigned __stdcall CalculationsProcedure(void *)
|
|
{
|
|
/*
|
|
using namespace ttmath;
|
|
|
|
Parser<Big<3,9> > parser;
|
|
|
|
parser.Parse("6");
|
|
std::string buf;
|
|
|
|
parser.stack[0].value.ToString(buf);
|
|
MessageBox(0, buf.c_str(), "", 0);
|
|
*/
|
|
|
|
|
|
ParserManager parser_manager;
|
|
|
|
parser_manager.Init();
|
|
|
|
// the main loop of calculations
|
|
while( GetPrgRes()->GetThreadController()->WaitForCalculatingAndBlockForStop() )
|
|
{
|
|
// for the first we must copy all variables which we're using
|
|
// (at this moment all calling from the main thread are stopped)
|
|
parser_manager.MakeCopyOfVariables();
|
|
|
|
// then we can set 'thread_controller' as being ready for 'stop' signal
|
|
GetPrgRes()->GetThreadController()->ReadyForStop();
|
|
// (now the main thread can call various methods for changing state)
|
|
|
|
// and finally we're cleaning the output window and parsing the input string
|
|
SetDlgItemText(GetPrgRes()->GetMainWindow(),IDC_OUTPUT_EDIT,"");
|
|
parser_manager.Parse();
|
|
|
|
// if there was a stop signal we continue the main loop without printing any values
|
|
if( GetPrgRes()->GetThreadController()->WasStopSignal() )
|
|
continue;
|
|
|
|
// at the end we're printing the result
|
|
parser_manager.PrintResult();
|
|
}
|
|
|
|
_endthreadex(0);
|
|
return 0;
|
|
}
|
|
|
|
|