On 4/27/07, Ken Klose
wrote: I've got a singleton object that is trying to run its operator()
method in
a separate thread, but I'm getting a segfault when I construct the
Thanks for replying!
The operator()() method is just a stub at the moment:
void PublishedListener::operator()()
{ this->run(); }
void PublishedListener::run()
{ cout << "Hooray! My thread is running" << endl; }
I tried stepping through the construction of the thread and it looks
like the problem is occurring somewhere in the construction of the
function0<void>. As a test I changed the constructor to this:
PublishedListener::PublishedListener(string directory)
{
cout << "1" << endl;
function0<void> runnable(*this);
cout << "2" << endl;
_thread = new thread(runnable);
cout << "3" << endl;
}
And I get the problem between 1 and 2.
Thanks,
Ken
PS - I see Peter Dimov suggested I use ref. I'm going to try that now
and reply to his post.
"Digvijoy Chatterjee"
object:
PublishedListener::PublishedListener(string directory) { _thread = new thread(*this); // segfault here }
PublishedListener.h: class PublishedListener { public: static PublishedListener &getInstance(); void run(); void operator()(); boost::filesystem::path getItemDirectory(); virtual ~PublishedListener(); private: PublishedListener(std::string directory); static PublishedListener *_instance; boost::thread *_thread; boost::filesystem::path *itemDirectory; };
Thanks in advance!
Are you sure the implementation of operator()() isnt seg faulting, the thread should be able to invoke it properly and i dont see any reason for the thread instantiation to segfault.. HTH Digz