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" );
     }

嗯!试过了 只要传指针进取就会变空。。。偶实在是木有办法了。。。
Global site tag (gtag.js) - Google Analytics