WinProcess.h
上传用户:cnxinhai
上传日期:2013-08-06
资源大小:265k
文件大小:5k
源码类别:

DVD

开发平台:

Visual C++

  1. /* This is the class that handles the Windows system functionality.
  2.  * Process and thread stuff is handled here.
  3.  *
  4.  * Copyright (C) 2001, 2002  Adam Schlag
  5.  */
  6. /*
  7.  * FreeBurn Software License
  8.  * (based on the Apache Software License)
  9.  * 
  10.  * Version 1.1
  11.  * 
  12.  * Copyright (c) 2001, 2002 The FreeBurn Project. All rights reserved.
  13.  * 
  14.  * Redistribution and use in source and binary forms, with or without 
  15.  * modification, are permitted provided that the following conditions are met:
  16.  * 
  17.  * 1. Redistributions of source code must retain the above copyright 
  18.  * notice, this list of conditions and the following disclaimer.
  19.  * 
  20.  * 2. Redistributions in binary form must reproduce the above copyright 
  21.  * notice, this list of conditions and the following disclaimer in the 
  22.  * documentation and/or other materials provided with the distribution.
  23.  * 
  24.  * 3. The end-user documentation included with the redistribution, if any, must 
  25.  * include the following acknowledgment:
  26.  * 
  27.  *  "This product includes software developed by the FreeBurn 
  28.  *     Project (http://freeburn.sourceforge.net/)."
  29.  * 
  30.  * Alternately, this acknowledgment may appear in the software itself, 
  31.  * if and wherever such third-party acknowledgments normally appear.
  32.  * 
  33.  * 4. The names "FreeBurn" and "FreeBurn Project" must not be 
  34.  * used to endorse or promote products derived from this software 
  35.  * without prior written permission. For written permission, please 
  36.  * contact aschlag@users.sourceforge.net.
  37.  * 
  38.  * 5. Products derived from this software may not be called "FreeBurn", 
  39.  * nor may "FreeBurn" appear in their name, without prior written 
  40.  * permission of the FreeBurn Project.
  41.  * 
  42.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 
  43.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  44.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  45.  * DISCLAIMED. IN NO EVENT SHALL THE FREEBURN PROJECT OR ITS 
  46.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  47.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
  48.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
  49.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
  50.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
  51.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  52.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  53.  * SUCH DAMAGE.
  54.  * 
  55.  * This software consists of voluntary contributions made by many 
  56.  * individuals on behalf of the FreeBurn Project. For more 
  57.  * information on the FreeBurn Project and FreeBurn, please see 
  58.  * <http://freeburn.sourceforge.net/>.
  59.  * 
  60.  * This software is distributed with software that is released under the GNU 
  61.  * General Public License (GPL).  You can find the terms of this license in the
  62.  * file GPL.txt distributed in this package.  You can find information on the
  63.  * software distributed with this package in the file PROGRAMS.txt.
  64.  */
  65. // although we are only going to read 80 characters at a time,
  66. // we'll keep the buffer large until we know we won't need a
  67. // smaller buffer
  68. #define BUFFER_SIZE 1024
  69. class CWinProcess : public CBaseThread
  70. {
  71. public:
  72.     
  73.     // basic constructor and destructors for the class
  74.     CWinProcess();
  75.     ~CWinProcess();
  76.     // creates the process based on the command string.
  77.     // returns a zero if successful, -1 if an error
  78.     FXint createCommandWithPipes(FXString& commandString);
  79.     // this method gets the string of text that has been saved
  80.     // for reading.  It contains the output of the process
  81.     FXint getStringText(FXString& outputString);
  82.     // these are methods for returning handles that are used 
  83.     // for reading the output of a process we start, and for
  84.     // letting the application know that the thread is complete.
  85.     // NOTE: FXInputHandle is synonomous with HANDLE in Windows
  86.     FXInputHandle getProcessEventHandle();
  87.     FXInputHandle getCompleteEventHandle();
  88. protected:
  89.     // this is the function/method to run
  90.     // in a seperate thread.  The thread will catch
  91.     // the I/O of the created process, and save the
  92.     // output into a string (m_readBuffer) that a
  93.     // program or application can read from with the
  94.     // method getStringText().
  95.     void theThreadFunc (void);
  96.     // These are the handles to the process events
  97.     FXInputHandle m_processEvent;
  98.     FXInputHandle m_completeEvent;
  99.     
  100.     // These are the handles to the stdout/stderr
  101.     // read handle and the stdin write handle
  102.     FXInputHandle m_stdoutReadHandle;
  103.     FXInputHandle m_stdinWriteHandle;
  104.     
  105.     // This is a handle to a semaphore so reading from the output
  106.     // string with getStringText() is serialized.  This is to prevent
  107.     // the caller of getStringText() from getting text that is garbled,
  108.     // or not getting text becasue of the asynchrounous nature of the
  109.     // thread we start and CreateProcess().
  110.     FXInputHandle m_threadSemaphore;
  111.     
  112.     // These hold the data to be returned with getStringText()
  113.     FXchar m_readBuffer[BUFFER_SIZE];
  114.     FXint  m_charsRead;
  115. };