假设有
string ret; //全局变量
void a()
{
//调用 
  string s = b();
}///返回一个字符串
string b()
{
    ret = "";
    while(ret=="")  ///等待myevent事件返回字符串,(myevent的触发在之前已定义)
    {
    }
    return ret;
}void myevent(string s)
{
  ret = s;
}问题:
1.函数b必须等待myevent事件触发才能获取字符串ret,是否有更好的办法,而不是用while死循环
2.如果在多少秒内没有myevent事件产生,则函数b返回默认值,如何设置超时

解决方案 »

  1.   

    使用Mutex来实现,例如:
    private Mutex mUnique = null;
    void a()
    {if( mUnique == null ) mUnique = new Mutex();
    mUnique.WaitOne();
    string s = b();}string b()
    {
    ret = "";
    if( mUnique != null )
    {
         mUnique.WaitOne();
         mUnique.ReleaseMutex();
    }
    return ret;
    }void myevent(string s)
    {
    ret = s;
    if( mUnique != null )
    {
         mUnique.ReleaseMutex();
    }
    }
      

  2.   

    to:Knight94(愚翁) 
    据我了解,mutex只能在主线程中new和ReleaseMutex,
    也只能在子线程中进行waitone,
    还望指点
      

  3.   

    to 据我了解,mutex只能在主线程中new和ReleaseMutex不是这样的,Mutex不但可以解决线程之间互斥或同步问题,还可以解决进程之间互斥或同步问题。
      

  4.   

    用线程解决吧,两个线程,a()放入一个睡眠线程,Thread.Sleep(int numMillisecs),另外开一个监视线程,如果ret值改变则直接激活线程,否则等待numMillisecs自动激活
      

  5.   

    线程的同步问题..用Mutex可以解决,正如Knight94(愚翁) 大哥所说..