On 04/22/2012 07:15 PM, Casey wrote:
Hello,
I'm getting some errors when I wrap a struct that I've written with
another struct. Here are the errors I'm getting:
tqueue.d(14): Error: function queue.Queue!(int).Queue.enqueue (int
value) is not
callable using argument types (int) shared
tqueue.d(15): Error: function queue.Queue!(int).Queue.dequeue () is not
callable
using argument types ()
Here's the receive block which the issue:
receive(
(T value) { queue.enqueue(value); },
(Tid caller) { send(caller, queue.dequeue); }
);
The queue itself is shared. Outside of that, nothing special going on. I
just have a class that I want to be able to in a concurrent environment
without having to modify the original class.
Any thoughts?
This works at least with 2.059 on 64-bit Linux:
import std.stdio;
import std.concurrency;
import core.thread;
class Foo
{
int i;
}
void workerFunc(Tid owner)
{
receive(
(shared(Foo) foo) {
writeln("Before: ", foo.i);
foo.i = 42;
});
owner.send(42);
}
void main (string[] args)
{
shared foo = new shared(Foo);
auto worker = spawn(&workerFunc, thisTid);
worker.send(foo);
receiveOnly!int();
writeln("After: ", foo.i);
}
The output:
Before: 0
After: 42
Ali