April 05, 2005
Try this:

import std.c.windows.windows;
import std.thread;
import std.stdio;

class RThread : Thread
{
	int index;
	
	this(int i)
	{
		super(&run);
		index = i;
	}

	int run()
	{
		writefln("thread %d",index);
		//allDone.countDown();
		return 0;
	}
}

int main(char[][] args)
{
	//CountDownLatch allDone = new CountDownLatch(5);
	RThread[5] threads;
	
	for (int i = 0; i < threads.length; i++)
		threads[i] = new RThread(i);
	
	foreach(RThread t; threads)
		t.start();
	
	//allDone.wait();
	Sleep(10000);
	printf("All done.\n");
	return 0;
}

Note: I dont have the concurrent stuff so I have included it but commented it out.

Regan
April 05, 2005
Alternate solution using seperate object, not derived from Thread:

import std.c.windows.windows;
import std.thread;
import std.stdio;

class Other
{
	int index;
	
	this(int i)
	{
		index = i;
	}
	
	int run()
	{
		writefln("thread %d",index);
		//allDone.countDown();
		return 0;
	}
}

int main(char[][] args)
{
	//CountDownLatch allDone = new CountDownLatch(5);
	Thread[5] threads;
	Other o;
	
	for (int i = 0; i < threads.length; i++) {
		o = new Other(i);
		threads[i] = new Thread(&o.run);
	}
	
	foreach(Thread t; threads)
		t.start();
	
	//allDone.wait();
	Sleep(10000);
	printf("All done.\n");
	return 0;
}

Regan
April 05, 2005
Ooops. One important correction is that the 'allDone' variable actually needs to be global, or otherwise accessable from the RThread or Other classes. eg.

import ..etc..

//global variable/singleton
CountDownLatch allDone;

//module static ctor, executed when program starts
static this()
{
	allDone = new CountDownLatch(5);
}

class RThread : Thread
{
  ..etc..
}

class Other
{
  ..etc..
}

int main(char[][] args)
{
  ..etc..
}

Regan
1 2
Next ›   Last »