Thread overview | ||||||
---|---|---|---|---|---|---|
|
April 27, 2016 vibe.d is blocking threads | ||||
---|---|---|---|---|
| ||||
Code: import std.concurrency; import core.thread; //import vibe.http.client; // If uncommented this line, the thread "worker" does not start void worker() { foreach (i; 0 .. 5) { Thread.sleep(500.msecs); writeln(i, " (worker)"); } } void main() { spawn(&worker); foreach (i; 0 .. 5) { Thread.sleep(300.msecs); writeln(i, " (main)"); } writeln("main is done."); } How to launch threads with vibe.d? It doesn't work at both compilers. - Gentoo Linux 64 - DMD64 D Compiler v2.069.0 (dub dependency) - DMD64 D Compiler v2.071.0 - dub-0.9.24 USE="dmd-2_069" dub.json: { "name" : "axt-threads-json", "description" : "A minimal D bundle.", "targetType": "executable", "targetPath": "bin", "dependencies" : { "vibe-d": "~>0.7.28", }, "configurations": [ { "name": "Debuger" }, { "name": "Release" } ] } |
April 27, 2016 Re: vibe.d is blocking threads | ||||
---|---|---|---|---|
| ||||
Posted in reply to RuZzz | On Wednesday, 27 April 2016 at 13:00:29 UTC, RuZzz wrote: > Code: > import std.concurrency; > import core.thread; > //import vibe.http.client; // If uncommented this line, the thread "worker" does not start > void worker() { > foreach (i; 0 .. 5) { > Thread.sleep(500.msecs); > writeln(i, " (worker)"); > } > } > > [...] you should use the built in concurrency primitives vibe.d offers. especially runTask and runWorkerTask. see the vibe.d examples and http://vibed.org/features |
April 27, 2016 Re: vibe.d is blocking threads | ||||
---|---|---|---|---|
| ||||
Posted in reply to RuZzz | On Wednesday, 27 April 2016 at 13:00:29 UTC, RuZzz wrote:
> Code:
> import std.concurrency;
> import core.thread;
> //import vibe.http.client; // If uncommented this line, the thread "worker" does not start
> void worker() {
> foreach (i; 0 .. 5) {
> Thread.sleep(500.msecs);
> writeln(i, " (worker)");
> }
> }
>
> void main() {
> spawn(&worker);
>
> foreach (i; 0 .. 5) {
> Thread.sleep(300.msecs);
> writeln(i, " (main)");
> }
>
> writeln("main is done.");
> }
>
> How to launch threads with vibe.d? It doesn't work at both compilers.
You don't. vibe.d uses fibers (aka green threads).
|
April 28, 2016 Re: vibe.d is blocking threads | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | On Wednesday, 27 April 2016 at 23:30:10 UTC, Nicholas Wilson wrote: > On Wednesday, 27 April 2016 at 13:00:29 UTC, RuZzz wrote: >> Code: >> import std.concurrency; >> import core.thread; >> //import vibe.http.client; // If uncommented this line, the thread "worker" does not start >> void worker() { >> foreach (i; 0 .. 5) { >> Thread.sleep(500.msecs); >> writeln(i, " (worker)"); >> } >> } >> >> void main() { >> spawn(&worker); >> >> foreach (i; 0 .. 5) { >> Thread.sleep(300.msecs); >> writeln(i, " (main)"); >> } >> >> writeln("main is done."); >> } >> >> How to launch threads with vibe.d? It doesn't work at both compilers. > > You don't. vibe.d uses fibers (aka green threads). That doesn't matter. Native threads should work just fine, I'm using them without problems in a vibe.d app. Could it be that your main() function is never called at all? Try to insert a writeln() at the beginning. If so, this could be related to the "VibeDefaultMain" setting, see here: http://vibed.org/docs#custom-main |
Copyright © 1999-2021 by the D Language Foundation