0

この単純な GraphicsMagick の例をノード バインディング/アドオンとして作成しようとしています。このコードは、GraphicsMagick 1.3.15 を使用する OSX 10.6.7 で期待どおりに動作します。

#include <Magick++.h>
#include <iostream>
using namespace std;

int main(int argc,char **argv)
{
  Magick::InitializeMagick(0);
  Magick::Image image;

  try {
    image.read( "snow.jpg" );
    image.scale("320");
    image.write( "snow-scaled.jpg" );
  }
  catch( Magick::Exception &error_ ) {
      cout << "Caught exception: " << error_.what() << endl;
      return 1;
    }
  cout << "Image scaled!" << endl;
  return 0;
}

Compiling:
g++ scale.cpp `GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs`

Running:
./a.out
Image scaled!

しかし、このコードをノード バインディング (0.6.14) にすると、フリーズするだけです (完全な要点を参照)。

void AsyncWork(uv_work_t* req) {
    std::cout << "AsyncWork..." << std::endl;
    Baton* baton = static_cast<Baton*>(req->data);
    baton->result = 12345;  // Just a test

    Magick::Image image;   // <--- Freezes here!
    image.read("snow.jpg");
    std::cout << "Scaling..." << std::endl;
    image.scale("200");
    std::cout << "Done!" << std::endl;
    image.write("snow-scaled.jpg");
    // and baton->error to true.
}

JavaScript から呼び出した場合の出力:

AsyncWork...

何が問題なのですか?余談ですが、これは実際にUbuntuでコンパイル/実行すると機能します!

4

1 に答える 1

1

Magick::InitializeMagick(0);in で初期化しようとしましたAsyncWorkか? 非同期関数はプール スレッドで実行されます。

ここで完成した GM アドオンをいつでも git できます。

于 2012-06-25T12:14:30.173 に答える