当前位置: 代码迷 >> VC >> 多线程的有关问题
  详细解决方案

多线程的有关问题

热度:7384   发布时间:2013-02-25 00:00:00.0
多线程的问题。
C# code
                             {                        ...                        labPK->Text="排课开始";            //新线程            ThreadStart^ ts=gcnew ThreadStart(this,&Form1::Start);            t=gcnew Thread(ts);            t->Start();            //Start();    //开始排课                                    //t->Join();                //while(t->IsAlive);            t->ThreadState;            //if(startstate)//等待线程结束            labPK->Text="完毕!";                        ...                       }private:Void Start()        {         ...        }


我想用一个新的线程来执行这个start()函数,代码如上。我想要的效果是当start()执行玩后再执行下面的语句。可现在的问题是无论是用join还是while(t->isalive)都会出现死循环的情况,在start()中我有用到修改窗体的lable的text属性我用了下面这个办法;
C# code
delegate void SetTextCallback(String^ text);private: void SetText(String^ text)        {            // InvokeRequired required compares the thread ID of the            // calling thread to the thread ID of the creating thread.            // If these threads are different, it returns true.            if (labPK->InvokeRequired)            {                    SetTextCallback^ d = gcnew SetTextCallback(this,&Form1::SetText);                labPK->Invoke(d, gcnew array<Object^>{ text });            }            else            {                labPK->Text = text;            }        }//设置进度条                delegate void Setpb(int value);              private:Void SetpbPK(int value)        {            if(value<=pbPK->Maximum)            if(pbPK->InvokeRequired)            {                Setpb ^pb=gcnew Setpb(this,&Form1::SetpbPK);                                pbPK->Invoke(pb,gcnew array<Object^>{ value });            }            else            {                pbPK->Value++;            }        }


可问题就出在invoke这儿,程序运行到invoke就死了、。如果去掉t->join()的话,invoke就不会有问题,但会先执行if里的语句接着又执行一遍else中的语句,但我只调用了一次setText();我是初学者也不知道这是什么意思。
 我现在想用join来控制执行的顺序但在invoke这儿又出现问题。望大哥帮忙!!

------解决方案--------------------------------------------------------
帮楼主顶,打算学C#,但是还没有开始
------解决方案--------------------------------------------------------
帮楼主顶,顺便说一下,这是C++ Code,楼主要选择正确!
------解决方案--------------------------------------------------------
start 代码
还有你用join无法精确控制
考虑用异步调用
  相关解决方案