appclass.cpp
来自「SMC takes a state machine stored in a .s」· C++ 代码 · 共 170 行
CPP
170 行
//// The contents of this file are subject to the Mozilla Public// License Version 1.1 (the "License"); you may not use this file// except in compliance with the License. You may obtain a copy of// the License at http://www.mozilla.org/MPL/// // Software distributed under the License is distributed on an "AS// IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or// implied. See the License for the specific language governing// rights and limitations under the License.// // The Original Code is State Machine Compiler (SMC).// // The Initial Developer of the Original Code is Charles W. Rapp.// Portions created by Charles W. Rapp are// Copyright (C) 2000 - 2003 Charles W. Rapp.// All Rights Reserved.// // Contributor(s): //// Class// AppClass//// Member Functions// AppClass() - Default constructor.// Run() - Start the system running.// ReceiveRequest(const char *) - Process a request.// CheckForRequest() - See if a request has arrived.// DoRequest() - Do the actual request processing here.// ProcessingCompleted() - All done.//// RCS ID// $Id: AppClass.cpp,v 1.5 2005/06/08 11:09:12 cwrapp Exp $//// CHANGE LOG// $Log: AppClass.cpp,v $// Revision 1.5 2005/06/08 11:09:12 cwrapp// + Updated Python code generator to place "pass" in methods with empty// bodies.// + Corrected FSM errors in Python example 7.// + Removed unnecessary includes from C++ examples.// + Corrected errors in top-level makefile's distribution build.//// Revision 1.4 2005/05/28 13:31:18 cwrapp// Updated C++ examples.//// Revision 1.0 2003/12/14 19:29:32 charlesr// Initial revision//#ifdef WIN32#pragma warning(disable: 4355)#endif#if !defined(WIN32)#include <unistd.h>#include <sys/time.h>#endif#include <memory.h>#include "AppClass.h"using namespace std;const static char _rcs_id[] = "$Id: AppClass.cpp,v 1.5 2005/06/08 11:09:12 cwrapp Exp $";AppClass::AppClass(): _fsm(*this), _number_of_requests(0), _continue_running(1){ // Uncomment following line to see debug output. // _fsm.setDebugFlag(true);}void AppClass::Run(){#ifdef WIN32 DWORD SleepTime;#endif while (_continue_running == 1) {#ifdef WIN32 // Sleep for half a second at a time. // This will allow for timely receipt of // SIGINTs. for (SleepTime = 5000; SleepTime > 0; SleepTime -= 500) { Sleep(500); } ProcessingCompleted();#else pause();#endif } return;} // end of AppClass::Run()void AppClass::ReceiveRequest(const char *message){ if (strcmp(message, "stop") == 0) { // Stop processing messages. _continue_running = 0; } else { // Increment the request count. ++_number_of_requests; // Process this message. _fsm.RequestReceived(); } return;} // end of AppClass::ReceiveRequest(const char*)void AppClass::CheckForRequest(){ if (_number_of_requests > 0) { _fsm.ProcessRequest(); } else if (_number_of_requests < 0) { cout << "The number of outstanding requests is less than zero ("; cout << _number_of_requests << "); resetting to zero." << endl; _number_of_requests = 0; } return;} // end of AppClass::CheckForRequest()void AppClass::DoRequest(){ // Decrement the request count. --_number_of_requests;#ifdef WIN32 cout << "Processing request ..." << endl;#else // Local variable decalarations. itimerval nextTimeout; // Sleep on this request. (void) memset((char *) &nextTimeout, 0, sizeof(nextTimeout)); nextTimeout.it_value.tv_sec = 5; if (setitimer(ITIMER_REAL, &nextTimeout, (itimerval *) NULL) < 0) { // Failed to start process timer - quit. _continue_running = 0; } else { cout << "Processing request ..." << endl; }#endif return;} // end of AppClass::DoRequest()void AppClass::ProcessingCompleted(){ cout << "... Processing completed." << endl; _fsm.ProcessingDone();} // end of AppClass::ProcessingCompleted()
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?