[haiku-development] Re: Hello, and a BBitmap question.

  • From: James Kim <jkim202@xxxxxxxxxxxxxxxxx>
  • To: haiku-development@xxxxxxxxxxxxx
  • Date: Sun, 08 Jun 2008 15:00:18 +1200

Thanks for that. But I still can't remove children from fParent. So I
tried the same procedure in another class by passing the same fParent.

It gave me an error in Haiku. When I execute "bt" in debug, the last
call is _CheckLock() after CountChildren().

I am suspecting two things at the moment.
1. fParent is actually not the parent of these 14 child BViews and there
is another BView in between.
2. fParent is locked or in use at the time.

I think it would more likely be 2, because in the other class, it
actually counted the number of children to be 14, which is correct. I
could add a child, which would consequently count to 15. But when I
attempted removing a child, it would remain at 15 and RemoveChild would
return false. I am not too sure if 2 is the main cause, but if so, how
do you unlock a BView that is in use? Or any alternative ideas? Thanks.


Regards,

James


On Sat, 2008-06-07 at 12:34 +0200, Ingo Weinhold wrote:
> On 2008-06-07 at 12:30:40 [+0200], Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> 
> wrote:
> > "Rene Gollent" <anevilyak@xxxxxxxxx> wrote:
> > > while (fParent->CountChildren() > 0) {
> > > fParent->RemoveChild(fParent->ChildAt(0));
> > > printf("%d\n", fParent->CountChildren());
> > > }
> > 
> > And since BView::CountChildren() is O(n), you should actually do:
> > 
> > while (true) {
> >     BView* view = fParent->ChildAt(0);
> >     if (view == NULL)
> >         break;
> > 
> >     fParent->RemoveChild(view);
> > }
> 
> Which can be written more compactly:
> 
> while (BView* view = fParent->ChildAt(0))
>       fParent->RemoveChild(view);
> 
> CU, Ingo
> 


Other related posts: