consoleui.h.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #ifndef _CONSOLEUI_H_
  2. #define _CONSOLEUI_H_
  3. #include <pthread.h>
  4. #include <queue>
  5. class ConsoleUICallbacks;
  6. /**
  7.  * This class provides an easy-to-use interface for interactive
  8.  * GNU readline-based console applications. This class is thread-safe.
  9.  */
  10. class ConsoleUI {
  11. private:
  12. friend class ConsoleUICallbacks;
  13. static ConsoleUI *instance;
  14. pthread_t thread;
  15. pthread_mutex_t inputLock;
  16. pthread_mutex_t outputLock;
  17. pthread_cond_t outputCond;
  18. std::queue<char *> input;
  19. std::queue<char *> output;
  20. bool quit;
  21. bool lineProcessed;
  22. ConsoleUI();
  23. ~ConsoleUI();
  24. void *threadMain(void *arg);
  25. void processOutput();
  26. void lineRead(char *line);
  27. bool canRead();
  28. static void cleanup();
  29. public:
  30. /**
  31.  * Returns the unique instance of ConsoleUI.
  32.  *
  33.  * @ensure result != NULL
  34.  */
  35. static ConsoleUI *getInstance();
  36. /**
  37.  * Start this ConsoleUI.
  38.  *
  39.  * @require The interface must not be started.
  40.  */
  41. void start();
  42. /**
  43.  * Stop this ConsoleUI.
  44.  *
  45.  * @require The interface must have already been started.
  46.  */
  47. void stop();
  48. /**
  49.  * Print a message to the console. This method does not
  50.  * print messages to screen immediately. Instead, the
  51.  * message is put into a queue, which will be processed
  52.  * later.
  53.  *
  54.  * @require
  55.  *    msg != NULL &&
  56.  *    The interface must have already been started.
  57.  */
  58. void print(const char *msg);
  59. /**
  60.  * Wait until all messages in the queue have been printed.
  61.  *
  62.  * @require The interface must have already been started.
  63.  */
  64. void waitUntilPrinted();
  65. /**
  66.  * Get the next input line in the input queue.
  67.  *
  68.  * @return A line (without newline character) which must be
  69.  *         freed, or NULL if there is nothing in the queue.
  70.  * @require The interface must have already been started.
  71.  */
  72. char *getInput();
  73. };
  74. #endif /* _CONSOLEUI_H_ */