0

C++ 对象可以有块作用域吗?例如,这样可以吗:(它崩溃了)

(放轻松,我还在学习 C++)

__block Poco::Thread* lastThread;

dispatch_async(dispatch_get_main_queue(), ^
{
    for (int i = 1; i <= 5; i++)
    {
        Poco::Runnable* worker = new  Worker(_counter, "worker" + Poco::NumberFormatter().format(i));
        Poco::Thread* workerThread = new Poco::Thread();
        workerThread->start(*worker);
        lastThread = workerThread;
    }
});

lastThread->join(); //wait so we can watch what happens. 
4

2 回答 2

3

您的代码是有效的,声明该指针__block范围没有错。但是您的代码会崩溃,因为调用lastThread时不指向任何对象join()。您异步运行该块,因此几乎可以肯定lastThread->join()到达之前lastThread将指向工作线程。

于 2013-01-28T01:18:03.433 回答
2

是的,指针可以具有块范围。lastThread->join()它崩溃的原因是指针初始化之间存在竞争。

于 2013-01-28T01:22:12.313 回答