Re: Threading problems

Anders Lyhagen <[email protected]> Sun, 28 Mar 2004 19:42:54 +0200
Newsgroups gmane.comp.cybernetics.webot.contest
Message-ID <[email protected]>
Hi,

The problem occurs when you make a call (from a thread) to any method 
in the webots API (camera_get_image, servo_set_position, robot_step 
etc).
I solved the image processing the way you mentioned but I would like to 
thread some movements as well, however, that is
impossible (with XP). Might install Linux though..

Best,
Anders L

> Hi,
>
> I could reproduce this problem and tryed to fix it but it is not 
> easy...
> Strangely enough, this problem occurs only under Window. The program
> appear to work fine under Linux... Actually under Windows the same
> OpenGL context cannot be shared among different threads, instead
> different OpenGL context should be used in each thread which cause some
> problems with initialization and cleanup which is done by the main 
> thread...
>
> It would be possible to create a special subclass the java Thread that
> would work with camera, but it would complicate the programming API.
>
> Instead, I would recommand you that only the main Thread should do the
> image acquisition, i.e., camera_enable() and subsequent
> camera_get_image() while you can distribute the image processing on
> other Threads. The int array receiving the image should be global
> variable to be shared between threads. Of couse, this requires some
> basic Thread synchronization to work well.
>
> -Olivier
>
> Olivier Michel wrote:
>
>> Anders Lyhagen wrote:
>>
>>
>>
>>> Hi,
>>>
>>> Does anyone know why this code yields a "cannot activate openGL 
>>> context"
>>> error?
>>>
>>>
>>>
>> I recently made the Webots API MT-safe, but this was not enough to fix
>> that problem. It seems that the OpenGL context is not inherited in
>> subsequent Java Threads. I will try to sort that out as it is 
>> becoming a
>> recurrent question... Thanks for the source code which is very simple
>> and shows nicely the problem.
>>
>> -Olivier
>>
>>
>>
>>> import com.cyberbotics.webots.Controller;
>>> public abstract class Judoka0 extends Controller {
>>>   static int camera;
>>>
>>>   public static void reset() {
>>>       camera = robot_get_device("camera");
>>>   }
>>>
>>>   public static void main() {
>>>       camera_enable(camera, 64);
>>>
>>>       Sensors sensors = new Sensors();
>>>       sensors.setPriority(Thread.MIN_PRIORITY);
>>>       sensors.start();
>>>
>>>       while(true)
>>>           robot_step(64);
>>>   }
>>>
>>>   static class Sensors extends Thread {
>>>        public void run() {
>>>           while(true) {
>>>               int[] img = camera_get_image(camera);
>>>               try {
>>>                   thread.sleep(200);
>>>               }
>>>               catch(Exception e){}
>>>           }
>>>       }
>>>   }
>>> }
>>>
>>> Best regards,
>>> Anders.L
>>>
>>>
>
>
>
> Yahoo! Groups Links
>
>
>
>
>
>



 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
     http://groups.yahoo.com/group/webots-contest/

<*> To unsubscribe from this group, send an email to:
     [email protected]

<*> Your use of Yahoo! Groups is subject to:
     http://docs.yahoo.com/info/terms/