锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产成人无码精品久久久久免费,激情综合色综合久久综合,久久综合给合综合久久http://www.shnenglu.com/SysProgrammer/Memory Layout......zh-cnThu, 08 May 2025 19:47:48 GMTThu, 08 May 2025 19:47:48 GMT60鍒╃敤綆¢亾瀵硅繘紼嬮噸瀹氬悜http://www.shnenglu.com/SysProgrammer/archive/2010/05/25/116333.htmlRenoRenoTue, 25 May 2010 15:07:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2010/05/25/116333.htmlhttp://www.shnenglu.com/SysProgrammer/comments/116333.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2010/05/25/116333.html#Feedback0http://www.shnenglu.com/SysProgrammer/comments/commentRss/116333.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/116333.html涓涓閬撴湁璇葷鍜屽啓绔?褰撲綘鎶婅繖涓閬撳拰涓涓繘紼嬫惌鎺ヨ搗鏉ョ殑鏃跺?鍙互鐢ㄨ繖涓閬撳綋浣滆緭鍏?涔熷彲浠ョ敤榪欎釜綆¢亾褰撲綔杈撳嚭,濡傛灉鏄鍚戠閬撹緭鍏?鍒欐暟鎹緭鍏ョ鏄啓绔?鍙︿竴绔槸璇葷,濡傛灉鏄敱綆¢亾杈撳嚭,鍒欑敱榪涚▼鍐欏叆綆¢亾,鏄啓绔?鍙︿竴绔槸璇葷,涔熷氨鏄帴鏀惰繘紼嬬殑杈撳嚭鏁版嵁鐨勪竴绔?鍥犳濡傛灉瑕侀噸瀹氬悜榪涚▼鐨勮緭鍏ュ拰杈撳嚭,鍒欓渶瑕?鏍圭閬?
浠ヤ笅浠g爜婕旂ず浜嗗垱寤篊MD.EXE榪涚▼,騫剁敤2鏍圭閬撻噸瀹氬悜浠栫殑杈撳叆杈撳嚭,騫惰鍙朇MD浜х敓鐨勭粨鏋滄暟鎹?
鍗冧竾涓嶈蹇樿璁劇疆SECURITY_ATTRIBUTES閲岀殑bInheritHandle,姣斿鍒涘緩綆¢亾鐨勬椂鍊欒鎶奲InheritHandle璁劇疆涓篢RUE

鍚屾牱涓嶄竴瀹氳鐢ㄧ閬?姣斿鏂囦歡,SOCKET絳夐兘鍙互閲嶅畾鍚?
濡傛灉鏄敤SOCKET,鏍規嵁緗戜笂鐨勫悕璇?鍙互鍒涘緩涓涓?闆剁閬撳悗闂?紼嬪簭.姣斿鍦ㄦ湇鍔″櫒绔笂鐨勫悗闂ㄧ▼搴忕洃鍚煇涓鍙?涓鏃︽湁榪炴帴璇鋒眰,鎺ュ彈鍚庡垱寤篠OCKET,灝卞湪榪欎釜鏃跺欏紑鍚疌MD.EXE,騫墮噸瀹氬悜杈撳叆杈撳嚭鍒版湇鍔″櫒涓婄殑榪欎釜SOCKET,榪欐牱渚夸負榪滅▼鐨勮繖涓繛鎺ヨ姹傚紑浜嗕竴涓湇鍔″櫒涓婄殑鍚庨棬錛屼粠鑰岃繙紼嬭繛鎺ュ彲浠ユ墽琛屾湇鍔″櫒騫惰繑鍥炵粨鏋?
婕旂ず浠g爜濡備笅:
//
// File: Main.cpp
// Purpose: Creates a process( cmd.exe for example ), and redirect its standard input
//   by using creating a pipe, then writes some bytes as commands to pipe.
//
#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#include <stdio.h>
#include <stdlib.h>

// Error report
void Error( const char *szErrMsg );

int main( int argc, char **argv )
{
 // Create pipe
 BOOL bRet;
 HANDLE hPipeRead, hPipeWrite;
 HANDLE hPipeReadII, hPipeWriteII;
 SECURITY_ATTRIBUTES sa;
 sa.nLength = sizeof( SECURITY_ATTRIBUTES );
 sa.bInheritHandle = TRUE;
 sa.lpSecurityDescriptor = NULL;
 bRet = ::CreatePipe( &hPipeRead, &hPipeWrite, &sa, 512 );
 bRet &= ::CreatePipe( &hPipeReadII, &hPipeWriteII, &sa, 512 );
 if ( !bRet )
 {
  Error( "Can't create pipe!" );
  return -1;
 }
 // Spawn a process
 STARTUPINFO StartInfo;
 PROCESS_INFORMATION ProcessInfo;
// memset( &StartInfo, 0, sizeof(StartInfo) );
// memset( &ProcessInfo, 0, sizeof(ProcessInfo) );
 ::GetStartupInfo( &StartInfo );
 StartInfo.cb = sizeof(StartInfo);
 StartInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
 StartInfo.wShowWindow = SW_HIDE;
 StartInfo.hStdInput = hPipeRead;
 StartInfo.hStdOutput = hPipeWriteII; //::GetStdHandle( STD_OUTPUT_HANDLE );
 StartInfo.hStdError = hPipeWriteII; //::GetStdHandle( STD_OUTPUT_HANDLE );
 bRet = ::CreateProcess( TEXT("c:\\windows\\system32\\cmd.exe"), NULL, NULL, NULL, TRUE, 0, NULL, NULL, &StartInfo, &ProcessInfo );
 ::Sleep(1000);
 printf("wake up...\n");
 if ( !bRet )
 {
  Error( "Can't create process!" );
  return -1;
 }
 // Write commands to pipe
 char *szCmd = "netstat\r\n";
 DWORD dwDummy;
 ::WriteFile( hPipeWrite, szCmd, 10, &dwDummy, NULL );
 ::Sleep(2000);
 printf("had written...\n");
 // Read from pipe
 char szBuf[1024];
 memset(szBuf, 0, sizeof(szBuf));
 ::ReadFile( hPipeReadII, szBuf, sizeof(szBuf), &dwDummy, NULL );
 // Don't leave till the spawned process goes end
// ::Sleep(2000);
 printf("had read...\n");
// ::WaitForSingleObject( ProcessInfo.hProcess, INFINITE );
 printf("%s\n", szBuf);

 return 0;
}

void Error( const char *szErrMsg )
{
 printf( "Error: %s\n", szErrMsg );
}


鍦╓inXP SP2 + VS 2005 Express Edition涓婄紪璇戝茍榪愯閫氳繃
榪欎釜鐗堟湰鐨刅S闇瑕佷笅杞藉茍璁劇疆Platform SDK,騫跺彟澶栨壘涓涓狹SVCRT80D.DLL濡傛灉鏄疍EBUG鐗堟湰鐨凞LL,騫惰緗?br>鍖呭惈鍜岄摼鎺ョ洰褰曞拰閾炬帴鍣ㄥ懡浠よ(user32,kernel32,libcmt)


Reno 2010-05-25 23:07 鍙戣〃璇勮
]]>
絎?涓畝鍗曠殑璇█http://www.shnenglu.com/SysProgrammer/archive/2009/12/24/104001.htmlRenoRenoThu, 24 Dec 2009 15:51:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2009/12/24/104001.htmlhttp://www.shnenglu.com/SysProgrammer/comments/104001.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2009/12/24/104001.html#Feedback3http://www.shnenglu.com/SysProgrammer/comments/commentRss/104001.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/104001.html
// Unnamed simple script language products define as the flowing:
program ::= declaration_list
declaration_list ::= var_declaration | fun_declaration
var_declaration ::= DECLARE type_specifier_list ID; END
type_specifier_list ::= type_specifier type_specifier_list | EMPTY
type_specifier ::= VAR
fun_declaration ::= BEGIN statement_list END
statement_list ::= statement statement_list | EMPTY
statement ::= expression_stmt | compund_list | selection_stmt | iteration_stmt
expression_stmt ::= expression; | ;
compund_list ::= { statement_list }
selection_stmt :: IF ( expression ) statement | IF ( expression ) statement ELSE statement
ireation_stmt ::= WHILE ( expression ) statement
expression ::= var = expression | simple_expression
var ::= ID
simple_expression ::= additive_expression relop additive_expression | additive_expression
relop ::= <= | < | > | >= | == | !=
additive_expression ::= additive_expression addop term | term
addop ::= + | -
term ::= term mulop factor | factor
mulop ::= * | /
factor ::= ( expression ) | var | NUM

Reno 2009-12-24 23:51 鍙戣〃璇勮
]]>
ConsoleMain.cpphttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103848.htmlRenoRenoWed, 23 Dec 2009 14:03:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103848.htmlhttp://www.shnenglu.com/SysProgrammer/comments/103848.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103848.html#Feedback0http://www.shnenglu.com/SysProgrammer/comments/commentRss/103848.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/103848.html 

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include "PathInterpreter.h"
 4 
 5 int main( int argc, char *argv[] )
 6 {
 7  if ( argc < 2 )
 8  {
 9   printf( "Usage: ExecuableFileName ScriptFileName [-DEBUG|-debug] \n" );
10   return 0;
11  }
12 
13  if ( argc > 3 )
14  {
15   printf( "Warning: More parameters have expected, after the third has ignored!\n" );
16   return 0;
17  }
18 
19  CPathInterpret Instance;
20  Instance.LoadScript( argv[1] );
21  if ( argc == 3 )
22  {
23   if ( strcmp( argv[2], "-DEBUG" ) == 0 || strcmp( argv[2], "-debug" ) == 0 )
24    Instance.Interpret( CPathInterpret::DEBUG );
25   else
26    printf( "Warning: Unknown about the third parameter!\n" );
27  }
28  else
29   Instance.Interpret();
30 
31  return 0;
32 }
33 
34 

 



Reno 2009-12-23 22:03 鍙戣〃璇勮
]]>
PathInterpreter.hhttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103847.htmlRenoRenoWed, 23 Dec 2009 14:03:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103847.htmlhttp://www.shnenglu.com/SysProgrammer/comments/103847.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103847.html#Feedback0http://www.shnenglu.com/SysProgrammer/comments/commentRss/103847.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/103847.html 

  1 #ifndef PATH_INTERPRETER
  2 #define PATH_INTERPRETER
  3 
  4 #define WIN32_LEAN_AND_MEAN
  5 #include <windows.h>
  6 #include <string.h>
  7 #include <stdlib.h>
  8 #include <ctype.h>
  9 #include <string>
 10 #include <list>
 11 
 12 using std::string;
 13 using std::list;
 14 
 15 #define MAX_WORD_LEN 8 // 8 Bytes
 16 
 17 class ContexScan;
 18 
 19 // CPathScriptLoader
 20 class CPathScriptLoader
 21 {
 22 public:
 23  string Context;
 24 
 25  void LoadScript( const char *szFile );
 26 };
 27 
 28 //
 29 // Contex Lex
 30 //
 31 //
 32 // ContexScan
 33 class ContexScan
 34 {
 35 public:
 36  enum ScanState { WORD, NOPRINT, };
 37 
 38 public:
 39  ContexScan();
 40  ~ContexScan();
 41 
 42  void SetExpression( const char *szExpr );
 43 
 44  bool SkipWord( const char *szWord );
 45  char *  GetNextWord();
 46  char *  CurrentWord() { return m_szCurrWord; }
 47  bool NextWord();
 48  void RebackWordByCount( int n ); // 閫鍑犱釜?
 49  void RebackNearestWordByName( const char *szWord ); // 閫鍒板摢涓?
 50 
 51 private:
 52  char * m_szExpr;
 53  char * m_pLastChar;
 54  char * m_pCurrChar;
 55  char m_szCurrWord[MAX_WORD_LEN];
 56  ScanState m_eState;
 57 };
 58 
 59 //
 60 // Syntax Tree Nodes
 61 //
 62 // AbstractNode
 63 class AbstractNode
 64 {
 65 public:
 66    AbstractNode( ContexScan& contex );
 67  virtual ~AbstractNode();
 68 
 69  virtual void Parse() = 0;
 70 
 71 protected:
 72  ContexScan& m_RefContexScan;
 73  list<AbstractNode *> m_Nodes;
 74 };
 75 
 76 // ProgramNode
 77 class ProgramNode : public AbstractNode
 78 {
 79 public:
 80    ProgramNode( ContexScan& contex );
 81  virtual ~ProgramNode();
 82 
 83  virtual void Parse();
 84 };
 85 
 86 // CommandListNode
 87 class CommandListNode : public AbstractNode
 88 {
 89 public:
 90    CommandListNode( ContexScan& contex );
 91  virtual ~CommandListNode();
 92 
 93  virtual void Parse();
 94 };
 95 
 96 // CommandNode
 97 class CommandNode : public AbstractNode
 98 {
 99 public:
100    CommandNode( ContexScan& contex );
101  virtual ~CommandNode();
102 
103  virtual void Parse();
104 };
105 
106 // RepeatNode
107 class RepeatNode : public AbstractNode
108 {
109 public:
110    RepeatNode( ContexScan& contex );
111  virtual ~RepeatNode();
112 
113  virtual void Parse();
114 };
115 
116 // BlockNode
117 class BlockNode : public AbstractNode
118 {
119 public:
120    BlockNode( ContexScan& contex );
121  virtual ~BlockNode();
122 
123  virtual void Parse();
124 };
125 
126 // PrimitiveNode
127 class PrimitiveNode : public AbstractNode
128 {
129 public:
130    PrimitiveNode( ContexScan& contex );
131  virtual ~PrimitiveNode();
132 
133  virtual void Parse();
134 };
135 
136 // CPathInterpret
137 // The Interpreter Facade interface
138 class CPathInterpret
139 {
140 public:
141  enum InterpretMode { NDEBUG, DEBUG, };
142 
143 public:
144  static InterpretMode m_Mode;
145 
146 public:
147  void LoadScript( const char *szFile );
148  void Interpret( InterpretMode mode = NDEBUG );
149 
150 private:
151  CPathScriptLoader m_ScriptLoader;
152  ContexScan   m_ContexScaner;
153 
154 };
155 
156 #endif // PATH_INTERPRETER
157 


Reno 2009-12-23 22:03 鍙戣〃璇勮
]]>
PathInterpreter.cpphttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103842.htmlRenoRenoWed, 23 Dec 2009 13:57:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103842.htmlhttp://www.shnenglu.com/SysProgrammer/comments/103842.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/103842.html#Feedback0http://www.shnenglu.com/SysProgrammer/comments/commentRss/103842.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/103842.html闃呰鍏ㄦ枃

Reno 2009-12-23 21:57 鍙戣〃璇勮
]]>
榪愬姩璺嚎鎺у埗鑴氭湰璇█http://www.shnenglu.com/SysProgrammer/archive/2009/12/23/Reno.htmlRenoRenoWed, 23 Dec 2009 08:58:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/Reno.htmlhttp://www.shnenglu.com/SysProgrammer/comments/103817.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2009/12/23/Reno.html#Feedback2http://www.shnenglu.com/SysProgrammer/comments/commentRss/103817.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/103817.html鏈榪戝湪鍋氫豢闆風數鐨勬父鎴忥紝鍏朵腑鏁屼漢椋炶埞鐨勮繍鍔ㄨ礬綰垮拰鐗瑰緛闇瑕佽兘鐏墊椿鐨勮緗紝騫朵笖灝介噺灝戝姩鍏朵粬閮ㄥ垎鐨勪唬鐮侊紝浜庢槸鎴戠殑鎯蟲硶鏄妸姣忕綾誨瀷鐨勯鑸規寚瀹氱殑榪愬姩璺嚎瀛樺叆鑴氭湰涓紝鐒跺悗鐢卞紩鎿庢牴鎹剼鏈墽琛?
鍥犳鍙互鎶婇鑸圭殑璺嚎鐪嬫垚鏄敱涓緋誨垪鐨勫叧閿偣緇勬垚錛屾瘡涓偣鏈夋瘮濡?涓睘鎬э紝X閫熷害錛孻閫熷害鍜屼繚鎸佽閫熷害鐨勬寔緇椂闂淬傝岃礬綰跨殑榪愬姩杞ㄨ抗鍙互鐢辯畝鍗曠殑鑴氭湰璇█鏉ュ畾涔夛紝姣斿涔熻闇瑕佸湪鏌愬嚑涓偣涔嬮棿閲嶅縐誨姩涓瀹氱殑嬈℃暟銆?/p>

浠ヤ笅鏄竴涓猄cript Demo:

GO
    BEGIN
        1.0 0.0 500
    END
    BEGIN
        -1.0 0.0 500
    END
    REPEAT 4
        BEGIN
             0.0 1.0 500
        END
        BEGIN
             1.0 0.0 500
        END
        BEGIN
             0.0 -1.0 500
        END
        BEGIN
            -1.0 0.0 500
        END
    END
END

琛ㄧず鍏堝乏鍙崇Щ鍔ㄤ竴嬈★紝鐒跺悗鍚戜笅錛屽悜鍙籌紝鍚戜笂錛屽悜宸﹀憟鐭╁艦縐誨姩4嬈★紝閫氳繃璁劇疆閫熷害鍒嗛噺鍙互瀹炵幇浠諱綍璺嚎鐨勭Щ鍔ㄤ互鍙婂叾浠栫壒寰併?br>璇ヨ剼鏈璦瑙i噴鍣ㄩ噰鐢ㄤ簡2涓璁℃ā寮忥紝Facade鍜孖nterpret妯″紡錛屽叾涓殑瑙i噴鍣ㄤ嬌鐢ㄤ簡鍑犱箮鍜屼換浣曡璁℃ā寮忎功涓婁粙緇嶇殑涓鏍風殑緇撴瀯錛屽緢緇忓吀鍛悀

闄勪笂璇█鐨勬枃娉曞畾涔?
program ::= GO command_list
command_list ::= command* END
command ::= begin_end_block | repeat
begin_end_block ::= BEGIN primitive END // Leaf Node on the Syntax tree
repeat ::= REPEAT INT command_list
primitive ::= SpeedX,SpeedY,Time // Recursive exit

// TestScript.txt
GO
  BEGIN
   1.0,0.0,500
  END
  BEGIN
   -1.0,0.0,500
  END
  REPEAT 4
   BEGIN
    0.0,1.0,500
   END
   BEGIN
    0.0,-1.0,500
   END
  END
END

// Execute result:



Reno 2009-12-23 16:58 鍙戣〃璇勮
]]>
涓浜涢棶棰樼殑瑙e喅鏂規硶http://www.shnenglu.com/SysProgrammer/archive/2009/05/06/82061.htmlRenoRenoWed, 06 May 2009 08:27:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2009/05/06/82061.htmlhttp://www.shnenglu.com/SysProgrammer/comments/82061.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2009/05/06/82061.html#Feedback0http://www.shnenglu.com/SysProgrammer/comments/commentRss/82061.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/82061.html   縐頒負瑙e喅鏂規硶鏄洜涓鴻繖浜涢棶棰樺疄鍦ㄥお灝忎簡錛屾柟妗堟牴鏈畻涓嶄笂.
   1. 鎯寵鍦╒S2003涓嬪緩绔嬩竴涓」鐩?寮瑰嚭 Automation涓嶈兘鍒涘緩瀵硅薄.GOOGLE鍚?regsvr32 scrrun.dll 娉ㄥ唽鎼炲畾
   2. 鎯寵鎵撳紑<<MFC綾誨簱璇﹁В.CHM>>,寮瑰嚭mk@DICTSTORE:your chm file absolute path,鎵撲笉寮,榪欎釜闂鎼炰簡浼氭椂闂? \
      a錛屽彸閿叧鑱攃hm鏂囦歡鐨?#8220;鎵撳紑鏂瑰紡”鍒癨Windows\HH.exe 
      b錛屽湪鍛戒護琛岃繍琛宺egsvr32 itss.dll 
      c錛屽湪鍛戒護琛岃繍琛宺egsvr32 hhctrl.ocx
   3. 鎶婂師鏉ョ殑VC6欏圭洰縐誨埌VS2003鍚?緙栬瘧鍑虹幇:fatal error C1010: 鍦ㄦ煡鎵鵑緙栬瘧澶存寚浠ゆ椂閬囧埌鎰忓鐨勬枃浠剁粨灝?br>      鍙抽敭鐐歸」鐩悕,閫夋嫨灞炴?鍏堜笉浣跨敤棰勭紪璇戝ご鏂囦歡,鐒跺悗鍐嶆緙栬瘧,OK鍚庡湪閲嶆柊璧風敤棰勭紪璇戝ご鏂囦歡.濉啓StdAfx.h  $(InitDir)\$(IntDir)/$(TargetName).pch

   閬囧埌榪欎簺闂,GOOGLE涓嬭繕鏄潪甯稿鏄撴悶鐨?
   bwt, 鍓嶅嚑澶╅噸瑁呯郴緇?鐢變簬鎳掔殑瑁匒nti-Virus,灝ゅ叾鏄壂鎻忔椂闂?鍥犳緋葷粺鐥呮瘨鏈夌偣澶氱殑.鍚庨潰褰誨簳闈╂柊,鍙戠幇鎸変互涓嬮『搴忕殑鎵ц鎸囦護,灝卞彲浠ヤ繚鎶ゅソ緋葷粺.
   1.涓嬭澆360
   2. 鎵撳ソ鎵鏈夐仐婕忚ˉ涓?br>   3. 寮鍚疻INDOWS闃茬伀澧?璧風敤鏇存柊
   4.寮鍚墍鏈?60淇濇姢
   5.涓嬭澆KA宸?鍙互閫氳繃360鐩存帴涓?
   6.鏇存柊鐥呮瘨搴撳埌鏈鏂?br>   7.鍏ㄧ郴緇熸壂鎻?璇ユ潃鐨勬潃
   鍏徃閲岀殑鐢佃剳鎴戝氨榪欐牱鎵撻?緇撴灉鍛嗕簡榪?騫?1嬈¢兘娌¢噸瑁?鏈夌偣鎭愭栫殑...

   鍙戠幇CPU,鎸囦護闆嗛潪甯告湁瓚?鍐欑殑LamaVM铏氭嫙鏈哄揩濂戒簡.


Reno 2009-05-06 16:27 鍙戣〃璇勮
]]>
鍏充簬C涓暟緇勫悕http://www.shnenglu.com/SysProgrammer/archive/2009/04/04/78951.htmlRenoRenoSat, 04 Apr 2009 08:45:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2009/04/04/78951.htmlhttp://www.shnenglu.com/SysProgrammer/comments/78951.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2009/04/04/78951.html#Feedback0http://www.shnenglu.com/SysProgrammer/comments/commentRss/78951.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/78951.html   澶у崐騫存病鍐欎簡錛岃瀹炲湪鐨勬垜涓漢璁や負C++鍗氬鏄渶濂界殑鎶鏈崥瀹箣涓錛屾垜涓鐩撮潪甯稿枩嬈㈠畠錛屾墍浠ュ彧瑕佹湁鏃墮棿錛屼竴瀹氳鍐欎竴浜涘湪涓婇潰銆?br>   鎰熸偀鏈娣辯殑灝辨槸錛屽ソ瀹規槗鑺辨暟涓皬鏃舵悶鍑烘潵鐨勪笢瑗匡紝榪囨鏃墮棿绔熺劧蹇樿浜嗭紝鎴栬呮槸璁板繂涔熷彉寰楁ā緋婁簡錛屽緢鏄績鐥涘晩錛佽褰曚笅鏉ワ紝灝變笉浼氭湁榪欑鍊掗湁浜嬩簡 :<
   璦褰掓浼狅紝宸茬粡濂藉儚鏄湪璇匯奀涓撳緙栫▼銆嬫椂錛岃鍒拌繃璇存暟緇勫悕鏄釜寰?#8220;濂囩壒”鐨勬寚閽堬紝鏌愮鎰忎箟涓婅錛屽畠涓嶈兘縐頒負鎸囬拡錛屽洜涓哄畠鍙兘浣滀負鍙沖煎嚭鐜幫紝褰撴椂涔熸瘮杈冭糠鎯戯紝寰堝伓鐒訛紝浠婂ぉ鍦ㄨ銆奤nix鐜楂樼駭緙栫▼銆嬫椂錛屽啓涓涓墦鍗板嚭榪涚▼鐨勭幆澧冨彉閲忚〃鐨勫皬鐜╂剰錛岃鐢ㄥ埌environ榪欎釜鍏ㄥ眬鎸囬拡錛屽畠灝辨槸涓寚閽堟暟緇勭殑鍚嶅瓧錛岃鏁扮粍姣忎釜鍏冪礌涓轟竴涓瓧絎︿覆錛屼互'\0'緇撳熬錛屾暟緇勬渶鍚庝竴涓厓绱犱負NULL錛屽紑濮嬪厛鎶婅鏁扮粍鐨勯鍦板潃鎷瘋礉緇欎簡鍙︿竴涓寚閽堬紝char **pp = environ; 鐒跺悗涓轟簡鍋忕Щ鍒頒笅涓涓瓧絎︿覆錛屾垜绔熺劧浣庣駭鐨勫啓浜?+environ錛岀紪璇戞姤閿欒: ISO C++ forbid to use a non-refernece type as a lvalue! 欏挎椂鎯沖埌environ鏄竴涓暟緇勫悕錛屼笉鑳戒綔涓轟竴涓乏鍊間嬌鐢ㄣ備簬鏄張鎯沖埌浜嗗鏋渋nt *ia1[]; int *ia2[]錛屽綋鍐檌a1 = ia2鏃朵細鍑虹幇鍚屾牱鐨勯敊錛岃繖灝辨槸鍥犱負ia1 ia2閮戒負鍙沖鹼紝浠諱綍涓涓笉鑳藉嚭鐜板湪=鍙風殑宸﹁竟鍏呭綋宸﹀鹼紒

浠g爜1錛?br>char *sz[] = { "aaa", "bbb", "ccc", 0 };
 int i = 0;
 while (sz[i] != 0)
 {
  char *p = sz[i];
  printf("%s\n", p);
  ++i;
 }

浠g爜2: Unix緋葷粺涓婃墦鍗頒竴涓繘紼嬬殑鐜鍙橀噺琛?br>char **pp = environ;

 while (*pp != 0) {
  printf("%s\n", *pp);
  ++pp;
 }

灝戠殑鍙滐紝1涓皬鏃舵氮璐逛簡....



Reno 2009-04-04 16:45 鍙戣〃璇勮
]]>
綰跨▼鍚屾瀵硅薄http://www.shnenglu.com/SysProgrammer/archive/2008/08/17/Thread.htmlRenoRenoSun, 17 Aug 2008 14:17:00 GMThttp://www.shnenglu.com/SysProgrammer/archive/2008/08/17/Thread.htmlhttp://www.shnenglu.com/SysProgrammer/comments/59164.htmlhttp://www.shnenglu.com/SysProgrammer/archive/2008/08/17/Thread.html#Feedback0http://www.shnenglu.com/SysProgrammer/comments/commentRss/59164.htmlhttp://www.shnenglu.com/SysProgrammer/services/trackbacks/59164.html  Waiting for Multiple Objects

    鍦╓indows涓? WaitForMultipleObjects鍑芥暟鏄竴縐嶅悓姝ョ殑鏂規硶,鍘熷艦瀹氫箟濡備笅:
    DWORD WinApi WaitForMultipleObjects( 
         DWORD nCount, const Handle * lpHandles, BOOL bWaitAll, DWORD dwMilliseconds );

   璋冪敤璇ュ嚱鏁扮殑綰跨▼榪涘叆絳夊緟鐘舵?鐩村埌鏉′歡婊¤凍鏃剁戶緇墽琛?鏉′歡鐨勬弧瓚沖拰鍙傛暟鏈夊叧.
   絎竴涓弬鏁頒負瑕佺瓑寰呯殑Objects鐨勪釜鏁?閫氬父榪欎簺Objects鏄竴緇勫彞鏌?Handles),鍙互鏄唴鏍稿璞″彞鏌勬垨鑰呮槸闈炲唴鏍稿璞?br>   鍙ユ焺,榪欎竴緇勫彞鏌勭敱絎?涓寚鍚戝垎閰嶇粰涓緋誨垪鍙ユ焺緙撳啿鍖虹殑鎸囬拡鎸囧嚭,絎?涓弬鏁板鏋滀負TRUE,鍒欑瓑寰呯殑綰跨▼蹇呴』絳夊埌鎵鏈?br>   鍙ユ焺鍏ㄩ儴瀹屾垚鎵ц鍚庢墠緇х畫鎵ц,濡傛灉涓篎ALSE, 閭d箞鍙鏈変竴涓繑鍥炲嵆鍙戶緇墽琛?絎?涓弬鏁拌緗甌IMEOUT鐨勬椂闂?
   濡傛灉鍦ㄧ粰瀹氱殑dwMilliseconds鍐呬粛娌$瓑鍒版潯浠舵弧瓚沖垯榪斿洖.

   閭d箞濡備綍寰楀埌絳夊緟鐨勭粨鏋滃憿,濡傛灉bWaitAll璁劇疆涓篢RUE,灝嗚繑鍥炲煎拰WAIT_OBJECT_0姣旇緝,濡傛灉鐩哥瓑鍒欏叏閮ㄥ彞鏌勯兘宸?br>   鍙戝嚭浜嗗畬鎴愪俊鍙? 濡傛灉bWaitAll璁劇疆涓篎ALSE, 濡傛灉鍙敱涓涓彂鍑轟俊鍙?閭d箞灝嗚繑鍥炲煎噺鍘籛AIT_OBJECT_0灝辨槸鍙?br>   鏌勬暟緇勪腑鐨勭儲寮?濡傛灉鏈夊涓俊鍙峰彂鍑?閭d箞榪欎釜鍊兼槸鏁扮粍涓渶灝忕儲寮曠殑閭d竴涓?榪欐牱灝卞彲浠ュ垽鏂槸鍝釜鍙戝嚭浜嗗畬鎴愪俊鍙?

   閫氬父,榪欎簺瑕佺瓑寰呯殑Objects鏄湪鍏朵粬鐨勭嚎紼嬩腑鎵ц鐨?閭d箞鎵ц瀹屾垚鍚庤皟鐢⊿etEvent( HANDLE hObjHandle )灝卞彲浠?br>   鍙戝嚭涓涓畬鎴愪俊鍙?渚涜皟鐢╓aitForMultipleObjects鐨勭嚎紼嬫帴鏀?

   浠ヤ笅鏄竴涓浣曚嬌鐢ㄨ鍑芥暟鐨勭畝鍗曚緥瀛?瀹冧嬌鐢–reateEvent鍑芥暟鍒涘緩浜?涓簨浠跺璞?鏀懼叆鍏ㄥ眬鐨刧hEvents緙撳瓨,鐒跺悗
   鍒涘緩浜嗕竴涓嚎紼?絳夊緟璇ョ嚎紼嬪彂鍑哄畬鎴愪俊鍙?
   //
  // Sync01.cpp
  //
 
 #include <windows.h>
 #include <stdio.h>
HANDLE ghEvents[2];
 DWORD WINAPI ThreadProc( LPVOID );
void main()
{
HANDLE hThread;
DWORD i, dwEvent, dwThreadID;
// Create two event objects
for (i = 0; i < 2; i++)
{
ghEvents[i] = CreateEvent(
NULL,   // default security attributes
FALSE,  // auto-reset event object
FALSE,  // initial state is nonsignaled
NULL);  // unnamed object
if (ghEvents[i] == NULL)
{
printf("CreateEvent error: %d\n", GetLastError() );
ExitProcess(0);
}
}
// Create a thread
hThread = CreateThread(
NULL,         // default security attributes
0,            // default stack size
(LPTHREAD_START_ROUTINE) ThreadProc,
NULL,         // no thread function arguments
0,            // default creation flags
&dwThreadID); // receive thread identifier
if( hThread == NULL )
{
printf("CreateThread error: %d\n", GetLastError());
return;
}
// Wait for the thread to signal one of the event objects
dwEvent = WaitForMultipleObjects(
2,           // number of objects in array
ghEvents,     // array of objects
FALSE,       // wait for any object
5000);       // five-second wait
// The return value indicates which event is signaled
switch (dwEvent)
{
// ghEvents[0] was signaled
case WAIT_OBJECT_0 + 0:
// TODO: Perform tasks required by this event
printf("First event was signaled.\n");
break;
// ghEvents[1] was signaled
case WAIT_OBJECT_0 + 1:
// TODO: Perform tasks required by this event
printf("Second event was signaled.\n");
break;
case WAIT_TIMEOUT:
printf("Wait timed out.\n");
break;
// Return value is invalid.
default:
printf("Wait error: %d\n", GetLastError());
ExitProcess(0);
}
// Close event handles
for (i = 0; i < 2; i++)
CloseHandle(ghEvents[i]);
}
DWORD WINAPI ThreadProc( LPVOID lpParam )
{
// Set one event to the signaled state
if ( !SetEvent(ghEvents[0]) )
{
printf("SetEvent failed (%d)\n", GetLastError());
return -1;
}
return 1;
}


Reno 2008-08-17 22:17 鍙戣〃璇勮
]]>
偷窥少妇久久久久久久久| 久久狠狠爱亚洲综合影院| 久久精品蜜芽亚洲国产AV| 久久亚洲春色中文字幕久久久| 久久久久久国产精品免费无码 | 欧美日韩中文字幕久久伊人| 久久精品国产半推半就| 国内精品久久久久久久coent| 亚洲?V乱码久久精品蜜桃 | 99久久精品这里只有精品 | 成人国内精品久久久久一区| 国产精品综合久久第一页 | 久久久久国色AV免费观看| 国产A三级久久精品| 国产精品丝袜久久久久久不卡| 亚洲国产日韩欧美综合久久| 狠狠色婷婷综合天天久久丁香| 天堂无码久久综合东京热| 久久久久亚洲AV无码专区首JN| 国产美女久久久| 亚洲人成网站999久久久综合| 国产高潮国产高潮久久久| 四虎国产精品免费久久| 国产精品天天影视久久综合网| 久久九九久精品国产免费直播| 国产免费福利体检区久久| 久久精品国产91久久麻豆自制 | 久久最新精品国产| 久久久久亚洲精品天堂| 中文字幕久久亚洲一区| 九九热久久免费视频| 99热精品久久只有精品| 国产精品一久久香蕉产线看 | 国产精品九九久久精品女同亚洲欧美日韩综合区 | 99久久夜色精品国产网站| 精品久久8x国产免费观看| 日产精品久久久一区二区| 亚洲AV日韩精品久久久久久久| 国内精品人妻无码久久久影院导航| 色综合久久夜色精品国产| 伊人久久成人成综合网222|