On Mon, 11 May 2009 08:11:22 -0400, Brok3n Halo <[email protected]> wrote:

Hi

I'm new do D and am getting the hang of things for the most part, but I can't get threading to work at all. I couldn't find any examples specific to D 1.0 but seeing that the documentation look similar outside of the example for D2,
I followed the example at
http://www.digitalmars.com/d/2.0/phobos/std_thread.html#Thread

I tried it both was shown, but it doesn't seem to work as documented there,
probably due to changes from 1.0 to 2.0.

I attached the code I derived for one of the two ways, both had the same
result though of the method I want to be threaded just running in the main
thread when the thread object is initialized.

I'm using ReBuild 0.78 (based on DMD 2.019) from Eclipse Descent on the
Windows 7 Beta.

The output of the program looks like this:
Error: Win32 Exception
1
2
3
4
5
6
7
8
9
10
WTF!
OH HAI
OH HAI
OH HAI
OH HAI
OH HAI
OH HAI
OH HAI
OH HAI
OH HAI
OH HAI


A victim of the property syntax :)

At this line:

        testthread = new Thread(testfunc);

Try this instead:

        testthread = new Thread(&testfunc);

Note that due to the property syntax sugar of D, typing just the function name of a no-parameter function is the same as if you put the parentheses, i.e. testfunc is the same as testfunc().

So you were calling testfunc, passing the result (which is a uint) to the constructor for Thread (which is probably what caused the exception), and then running the thread.

This is why you get the count-to-10 before WTF.

Putting the address (&) symbol before the function is now passing the function delegate (a way to call the function) to the thread, which is what you want.

FWIW, I think there is an i/o bug with threading in the latest release, see bug 2907 http://d.puremagic.com/issues/show_bug.cgi?id=2907

-Steve

Reply via email to