From: Walle Wallen on
Hey,
I'm having a hard time figuring out how threads works, and how to use
them. I'm currently working on a project were I need to achieve
parallelism in the code, but I always ends up with a multiply threads,
working in a queue (after each other, as a single thread program).

If we take a look at the code example bellow. What I'm trying to achieve
is the following.
The main loop starts a new thread, executes it and then CONTINUES,
without waiting for
the thread to finish. They should work simultaneously.

The problem is, they don't. So, I tried executing the thread without
using join. But it crashed
the program since the thread didn't have time to finish.

Can someone please help me?

//Walle

Example code
def func()
#Tcp connection and more
end

def main_loop()
#do some work
aThread = Thread.new {func()}
aThread.join
end

main_loop()
--
Posted via http://www.ruby-forum.com/.

From: Jesús Gabriel y Galán on
On Wed, May 26, 2010 at 12:07 PM, Walle Wallen <walle.sthlm(a)gmail.com> wrote:
> Hey,
> I'm having a hard time figuring out how threads works, and how to use
> them. I'm currently working on a project were I need to achieve
> parallelism in the code, but I always ends up with a multiply threads,
> working in a queue (after each other, as a single thread program).
>
> If we take a look at the code example bellow. What I'm trying to achieve
> is the following.
> The main loop starts a new thread, executes it and then CONTINUES,
> without waiting for
> the thread to finish. They should work simultaneously.

When you call join, the main thread waits for the other to complete.

> The problem is, they don't. So, I tried executing the thread without
> using join. But it crashed
> the program since the thread didn't have time to finish.

So you want the main thread to do some work in parallel with the other
thread but then wait for it before exiting the program?
Then, you should start the thread, then do main's work, and then
finally join the thread:

def func()
#Tcp connection and more
end

def main_loop()
aThread = Thread.new {func()}
#do some work
aThread.join
end

main_loop()


Jesus.

From: Walle Wallen on
> So you want the main thread to do some work in parallel with the other
> thread but then wait for it before exiting the program?
> Then, you should start the thread, then do main's work, and then
> finally join the thread:


That achieves the same result, or close to it. I don't want the main
thread to wait for the second thread do finish, but in the same
time I have to, otherwise the program crashes.

So, the main threads should launch a seconds thread, and then
continue with it's work, and ignore the second thread. The
seconds thread should run in it's on speed, and don't have to
finish before the main thread/loop does.

Hehe, I'm having a hard time explaining what I'm trying to achieve

//Walle


--
Posted via http://www.ruby-forum.com/.

From: Jesús Gabriel y Galán on
On Wed, May 26, 2010 at 12:38 PM, Walle Wallen <walle.sthlm(a)gmail.com> wrote:
>> So you want the main thread to do some work in parallel with the other
>> thread but then wait for it before exiting the program?
>> Then, you should start the thread, then do main's work, and then
>> finally join the thread:
>
>
> That achieves the same result, or close to it.  I don't want the main
> thread to wait for the second thread do finish, but in the same
> time I have to, otherwise the program crashes.
>
> So, the main threads should launch a seconds thread, and then
> continue with it's work, and ignore the second thread. The
> seconds thread should run in it's on speed, and don't have to
> finish before the main thread/loop does.
>
> Hehe, I'm having a hard time explaining what I'm trying to achieve

I think it's clear, and what you have to do is what I explained. The
main thread launches the second thread and then goes on with its work.
Once the main thread finished all its work and it's about to exit the
program, that's when you join the other thread, to ensure it finishes.

Jesus.

From: Walle Wallen on
> I think it's clear, and what you have to do is what I explained. The
> main thread launches the second thread and then goes on with its work.
> Once the main thread finished all its work and it's about to exit the
> program, that's when you join the other thread, to ensure it finishes.
>
> Jesus.

Okey, I think I got it.
Thanks, I really appreciate

--
Posted via http://www.ruby-forum.com/.

 |  Next  |  Last
Pages: 1 2
Prev: Watir - finding element in form
Next: Regarding Arrays