Hi Adrian,

you can use *either* Isolate::Enter and Isolate::Exit *or* use
Isolate::Scope to imply being inside the isolate while being in the
scope. If you look into isolate.h, you should also notice that you
need to have exited the isolate before disposing it. Besides that, I
think you need to have locked onto the isolate *before* entering an
handle scope.

For a general example you should take a look at d8.cc which implements
the debugging shell of v8. The method void
SourceGroup::ExecuteInThread() shows how to execute a script inside an
isolate. I hope this helps.

Cheers,

Yang

On Oct 11, 10:48 am, Adrian Basheer <adrianbash...@gmail.com> wrote:
> I am sorry for bothering you again.... I cannot seem to find any samples to
> help me with my problem. Below is my failure, followed by a stack trace.
>
> It seems that v8 is failing to initialize, and I cannot understand why....
>
> I am linking with v8_base.lib and v8_snapshot.lib
>
> Thanks a lot for your time..
>
> class TestThread : public Thread::Thread
> {
> public:
>   TestThread(){};
>   void TestThread::run()
>   {
>     v8::Isolate *pIsolate = v8::Isolate::New();
>     pIsolate->Enter();
>     v8::Isolate::Scope isolate_scope(pIsolate);
>     v8::HandleScope handle_scope;
>
>     v8::Locker
> locker(pIsolate);//<-------------------------------------------------This
> fails
>
>     v8::Handle<v8::String> test = v8::String::New("Hello");
>
>     pIsolate->Dispose();
>   }
>
> };
>
> int main(int argc, const char* argv[])
> {
>   TestThread mythread;
>   mythread.start();
>   mythread.waitDone();
>
> }
>
>   testUsingV8dll.exe!v8::internal::OS::DebugBreak()  + 0x3 bytes
>   testUsingV8dll.exe!v8::internal::OS::Abort()  + 0x31 bytes
>   testUsingV8dll.exe!_V8_Fatal()  + 0xa0 bytes
>   testUsingV8dll.exe!v8::internal::Deserializer::Allocate()  + 0x23d bytes
>   testUsingV8dll.exe!v8::internal::Deserializer::Synchronize()  + 0x36 bytes
>   testUsingV8dll.exe!v8::internal::Heap::IterateStrongRoots()  + 0x3b bytes
>   testUsingV8dll.exe!v8::internal::Deserializer::Deserialize()  + 0x109
> bytes
>   testUsingV8dll.exe!v8::internal::Isolate::Init()  + 0x6d4 bytes
>   testUsingV8dll.exe!v8::internal::V8::Initialize()  + 0xf2 bytes
>   testUsingV8dll.exe!v8::internal::Snapshot::Deserialize()  + 0x3a bytes
>   testUsingV8dll.exe!v8::internal::Snapshot::Initialize()  + 0x68 bytes
>   testUsingV8dll.exe!v8::internal::Factory::isolate()  + 0xfa bytes
>   testUsingV8dll.exe!v8::V8::Initialize()  + 0x2a bytes
>   testUsingV8dll.exe!v8::Locker::Locker()  + 0x91 bytes
>
> > testUsingV8dll.exe!TestThread::run()  Line 24 + 0xc bytes C++
>
> On Mon, Oct 10, 2011 at 2:39 PM, Adrian Basheer 
> <adrianbash...@gmail.com>wrote:
>
>
>
>
>
>
>
> > Thanks a lot for your help :)
>
> > On Mon, Oct 10, 2011 at 2:20 PM, Vyacheslav Egorov 
> > <vego...@chromium.org>wrote:
>
> >> You have to use Isolate::Enter or Isolate::Scope.
>
> >> If you want to use the default isolate just acquire isolate lock with
> >> Locker.
>
> >> v8.h includes very detailed comments. Please read them for further
> >> information:
>
> >>http://code.google.com/p/v8/source/browse/trunk/include/v8.h#3510
>
> >> --
> >> Vyacheslav Egorov
>
> >> On Mon, Oct 10, 2011 at 1:16 PM, Adrian Basheer 
> >> <adrianbash...@gmail.com>wrote:
>
> >>> Hi,
>
> >>> I am afraid I do not know how to enter an isolate (I don't remember it
> >>> coming up in the v8 tutorial)...
>
> >>> Can you help me please?
>
> >>> Thanks!
>
> >>> Adrian.
>
> >>> On Mon, Oct 10, 2011 at 2:09 PM, Vyacheslav Egorov <vego...@chromium.org
> >>> > wrote:
>
> >>>> You can not declare handle scope in a thread that does not yet own V8
> >>>> Isolate. You should enter an Isolate first.
>
> >>>> --
> >>>> Vyacheslav Egorov
>
> >>>> On Mon, Oct 10, 2011 at 1:02 PM, Adrian <adrianbash...@gmail.com>wrote:
>
> >>>>> Hi,
>
> >>>>> This is the exact, complete program, that is failing..
>
> >>>>> class TestThread : public Thread::Thread
>
> >>>>> {
>
> >>>>> public:
>
> >>>>>       TestThread(){};
>
> >>>>>       void TestThread::run()
>
> >>>>>       {
>
> >>>>>         v8::HandleScope scope;//<--This failes
>
> >>>>>       }
>
> >>>>> };
>
> >>>>> int main(int argc, const char* argv[])
>
> >>>>> {
>
> >>>>>   v8::HandleScope scope; //<--This works
>
> >>>>>   TestThread mythread;
>
> >>>>>   mythread.start();
>
> >>>>>   mythread.waitDone();
>
> >>>>> }
>
> >>>>>  --
> >>>>> v8-users mailing list
> >>>>> v8-users@googlegroups.com
> >>>>>http://groups.google.com/group/v8-users
>
> >>>>  --
> >>>> v8-users mailing list
> >>>> v8-users@googlegroups.com
> >>>>http://groups.google.com/group/v8-users
>
> >>>  --
> >>> v8-users mailing list
> >>> v8-users@googlegroups.com
> >>>http://groups.google.com/group/v8-users
>
> >>  --
> >> v8-users mailing list
> >> v8-users@googlegroups.com
> >>http://groups.google.com/group/v8-users

-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users

Reply via email to