core.thread 正确传参数方式
ww21xx
2012-03-06
在D语言中如何在thread正确传参数?
原型已经改成 this(void function() fn, uint sz = cast(uint)0); 了! auto worker = new Thread( { listenWorkerThread( m_handle ); } ); 这样到是可以传 不过传过去一定是空的! 我就想传一个正确的指针过去! 请问各位领导你们是咋做的? 我用法错了? |
|
flythink
2012-03-07
直接lambda就好了, 变量也能捕获
|
|
ww21xx
2012-03-07
flythink 写道 直接lambda就好了, 变量也能捕获
我有点没整明白。。。 |
|
flythink
2012-03-07
int i = 4;
Thread t = new Thread( delegate {i=5;} ); t.start(); t.join(); writeln(i); |
|
ww21xx
2012-03-08
flythink 写道 int i = 4;
Thread t = new Thread( delegate {i=5;} ); t.start(); t.join(); writeln(i); 额用 delegate 哦! 还真没试过。。。这样能传指针了? 我一直用的是 new Thread(&funName); 今天晚上回去试看!实际上我传的那个参数是句柄,但是不知道啥原因传到子线程中后,就变了。。。 谢谢了! |
|
betty_betty2008
2012-03-08
ww21xx 写道 flythink 写道 int i = 4;
Thread t = new Thread( delegate {i=5;} ); t.start(); t.join(); writeln(i); 额用 delegate 哦! 还真没试过。。。这样能传指针了? 我一直用的是 new Thread(&funName); 今天晚上回去试看!实际上我传的那个参数是句柄,但是不知道啥原因传到子线程中后,就变了。。。 谢谢了! Thread t=new Thread({i=5;}); 应该也行了吧。 |
|
ww21xx
2012-03-08
betty_betty2008 写道 ww21xx 写道 flythink 写道 int i = 4;
Thread t = new Thread( delegate {i=5;} ); t.start(); t.join(); writeln(i); 额用 delegate 哦! 还真没试过。。。这样能传指针了? 我一直用的是 new Thread(&funName); 今天晚上回去试看!实际上我传的那个参数是句柄,但是不知道啥原因传到子线程中后,就变了。。。 谢谢了! Thread t=new Thread({i=5;}); 应该也行了吧。 如果这样传指针过去 指针会变的!所以我不知道这样用是否是正常用法! |
|
ww21xx
2012-03-08
this(void function() fn, uint sz = cast(uint)0); Initializes a thread object which is associated with a static D function. Parameters:void function() fn The thread function. uint sz The stack size for this thread. In: fn must not be null. this(void delegate() dg, uint sz = cast(uint)0); Initializes a thread object which is associated with a dynamic D function. Parameters:void delegate() dg The thread function. uint sz The stack size for this thread. In: dg must not be null. 这就是线程的原型,根本就不让传参数, 咋办? |
|
flythink
2012-03-09
非要传参数, 自己继承一个不就好了...
class DerivedThread : Thread { this(int xx) { this._xx = xx; super( &run ); } private : int _xx; void run() { //do something with xx printf( "Derived thread running.\n" ); } |
|
ww21xx
2012-03-09
flythink 写道 非要传参数, 自己继承一个不就好了...
class DerivedThread : Thread { this(int xx) { this._xx = xx; super( &run ); } private : int _xx; void run() { //do something with xx printf( "Derived thread running.\n" ); } 嗯!试过了 只要传指针进取就会变空。。。偶实在是木有办法了。。。 |