Node.js рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЖрд▓реЗрдЦреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдпрд╛ рдХреБрдЫ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WMI (WMI рдХреЛ рдиреЛрдб рд╕реЗ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред JMI, рдФрд░ WMI рдЕрдиреБрд░реЛрдз рд▓рдВрдмреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрдВрдЧреЗ, рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реЗрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╣реИ рд╕реЙрдХреЗрдЯреНрд╕, рд╕рдВрдЪрд╛рд░ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ)ред рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдЖрдк рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЛрдб- ffi) рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЕрднреА рднреА рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдПрдХ рдмреИрд╕рд╛рдЦреАред рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рддрдерд╛рдХрдерд┐рдд WScript (рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрд╕реНрдЯ) рд╣реИ - рдпрд╣ рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JScript, VBScriptред JScript рд╕реАрдзреЗ WMI рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдо child_process рдЪрд▓рд╛ рд╕рдХреЗрдВ, рдЬрд┐рд╕рдореЗрдВ JScript рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JSON рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬреЗрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмреИрд╕рд╛рдЦреА, рдЕрд░реНрдерд╣реАрди рдФрд░ рдирд┐рд░реНрджрдпреА рд╣реИред рдФрд░ рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ред рдореИрдВ WMI рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдХрдо рдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдореИрдВ рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред
UPD: рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛
рдореИрдВ VS2010 рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рдерд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрд░реЛрдд рдиреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдЬреЗрдПрд╕, рдЕрдирдкреИрдХ рдХрд░реЗрдВ рдФрд░ vcbuild.bat рдЪрд▓рд╛рдПрдВ, рдЬреЛ рд░реВрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред vcbuild.bat Visual Studio рдФрд░ config рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди 2.7 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдиреЛрдб-рдЬрд┐рдк рдХреЛ npm
npm install node-gyp
рд╕рд╛рде
npm install node-gyp
ред
рдЕрдм рдЪрд▓рд┐рдП Visual Studio (CLR Empty Project) рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЛ .dll, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ .node рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ CLR рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рдорд╛рд╡реЗрд╢ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
node-v0.8.15\deps\v8\include
node-v0.8.15\deps\uv\include
node-v0.8.15\src
рдФрд░ рдЕрдм рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдк рд╡реАрдПрд╕ (рд╡реИрдХрд▓реНрдкрд┐рдХ) рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рдиреЛрдЯрдкреИрдб / рд╕рдмрд▓рд╛рдЗрдо / рд╡реЗрдмрд╕реНрдЯреЙрд░реНрдо рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рд╕реЛрд░реНрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рд╡рд╣рд╛рдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ.рдЧрд╛рдЗрдк рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗред рдпрд╣ рдлрд╛рдЗрд▓ рдиреЛрдб-рдЬрд┐рдк рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХреЛ рдмрддрд╛рдПрдЧреА рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИред
{ "targets": [ { "target_name": "getSummAsync", "sources": [ "async.cpp" ] } ] }
рдЕрдм рд╣рдо рд╕рдВрдХрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд▓рд╛рдЗрди
node-gyp configure
рдФрд░ рдлрд┐рд░
node-gyp build
рдЕрдм рд╣рдорд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ рдмрд┐рд▓реНрдб / рд░рд┐рд▓реАрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрдЧрд╛
рдЙрджрд╛рд╣рд░рдг рдЦреБрдж
рдореИрдВ рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдЧрд╛ред рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рдпреЛрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ, рд╕рдХрд╛рд░рд╛рддреНрдордХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ, рдмрджрд▓реЗ рдореЗрдВ, рд╣рдо рдЙрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
struct Summ_req { vector<int> numbers; vector<int> gtz; int result; Persistent<Function> callback; };
рдпрд╣ рд╡реЗрдХреНрдЯрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред
vector<int> numbers;
рд╡рд╣ рд╡реЗрдХреНрдЯрд░ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред
vector<int> gtz;
рдпрд╣рд╛рдВ рд╣рдо рд░рд┐рдЬрд▓реНрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ
int result;
рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдк рдорд╛рдирдХ v8 рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реИ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдиреАрдЪреЗред
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ 3 рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдВрдЧреЗ, рдореБрдЦреНрдп рдЬрд┐рд╕реЗ рд╣рдо рдиреЛрдб.рдЬреЗрдПрд╕ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рджреЛ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрдирд╛рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп рдХрд╛рд░реНрдп
getSummAsync рджреЛ рддрд░реНрдХреЛрдВ, рддрддреНрд╡реЛрдВ рдХреА рд╣рдорд╛рд░реА рд╕рд░рдгреА рдФрд░ рдХреЙрд▓рдмреИрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╣реА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рд╕рддреНрдп рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Local<Function> callback = Local<Function>::Cast(args[1]); Local<Array> numbers = Local<Array>::Cast(args[0]);
рдЕрдЧрд▓рд╛, рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдРрд░реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
Summ_req* request = new Summ_req; request->callback = Persistent<Function>::New(callback); for (size_t i = 0; i < numbers->Length(); i++) { request->numbers.push_back(numbers->Get(i)->Int32Value()); }
рд▓рдЧрд╛рддрд╛рд░ рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рднреА, рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рд╣рдо рд▓рд╛рдЗрди рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
uv_queue_work(uv_default_loop(), req, Worker, After);
getSummAsync static Handle<Value> getSummAsync (const Arguments& args) { HandleScope scope; if (args.Length() < 2 || !args[0]->IsArray()) { return ThrowException(Exception::TypeError(String::New("Bad arguments"))); } if (args[1]->IsFunction()) { Local<Function> callback = Local<Function>::Cast(args[1]); Local<Array> numbers = Local<Array>::Cast(args[0]); Summ_req* request = new Summ_req; request->callback = Persistent<Function>::New(callback); for (size_t i = 0; i < numbers->Length(); i++) { request->numbers.push_back(numbers->Get(i)->Int32Value()); } uv_work_t* req = new uv_work_t(); req->data = request; uv_queue_work(uv_default_loop(), req, Worker, After); } else { return ThrowException(Exception::TypeError(String::New("Callback missing"))); } return Undefined(); }
рд╡рд░реНрдХрд░ рдлрдВрдХреНрд╢рди рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╣рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡реА 8 рдЙрдкрдХрд░рдг рдирд╣реАрдВред рд╡рд░реНрдХрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреЛрдб.рдЬреЗрдПрд╕ рдФрд░ рд╡реА 8 рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧреЗ рдХреЛ рдЬреЗрдПрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ v8 рд╕рд░рдгреА рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдордЬрд╝рджреВрд░ void Worker(uv_work_t* req) { Summ_req* request = (Summ_req*)req->data; request->result = 0; for (vector<int>::iterator it = request->numbers.begin(); it != request->numbers.end(); ++it) { request->result += *it; if (*it > 0) { request->gtz.push_back(*it); } }
рдЕрдм рдЖрдлреНрдЯрд░ рдлрдВрдХреНрд╢рдиред рд╡рд░реНрдХрд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдлреНрдЯрд░ рдлрдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ, рдФрд░ рд╡рд░реНрдХрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ, рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕ рдХрд╛рд░рдг рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред
Handle<Value> argv[2];
рдпрд╣рд╛рдБ рд╣рдо рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВрдЬрд╝ рдбрд╛рд▓рддреЗ рд╣реИрдВ
request->callback->Call(Context::GetCurrent()->Global(), 2, argv);
рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣реЗрдВрдЧреЗ рдЬреЛ argv рдХреЛ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред
рдХреЗ рдмрд╛рдж void After(uv_work_t* req) { HandleScope scope; Summ_req* request = (Summ_req*)req->data; delete req; Handle<Value> argv[2]; argv[0] = Integer::New(request->result); Local<Array> gtz = Array::New(); size_t i = 0; for (vector<int>::iterator it = request->gtz.begin(); it != request->gtz.end(); ++it) { gtz->Set(i, Integer::New(*it)); i++; } argv[1] = gtz; TryCatch try_catch; request->callback->Call(Context::GetCurrent()->Global(), 2, argv); if (try_catch.HasCaught()) { FatalException(try_catch); } request->callback.Dispose(); delete request; }
рдЕрдм рд╣рдо рдиреЛрдб-рдЬрд┐рдк рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдиреЛрдб рд╕реЗ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
var foo = require('./getSummAsync.node') foo.getSummAsync([1,2,3,6,-5],function(a, b){ console.log(a, b); });
рдкрд░рд┐рдгрд╛рдо
7 [ 1, 2, 3, 6 ]
рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИ, рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЬреНрдпрд╛рджрд╛ рдбрд╛рдВрдЯреЗрдВ рдирд╣реАрдВред
рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдкреВрдЫреЗрдВ!
рд╕рдВрджрд░реНрдн