代码如下:
for(int i = 0;i < 10;i++) {
Thread t = Thread::New([&]{
String filename = String::New("./tmp/download/file")
->append(Integer::New(i)->toString()); //*出现异常
ArchiveConnection c = ArchiveConnection::New(url);
c->connect();
c->download(String::New("testdata"),filename);
});
t->start();
}
stack-use-after-scope貌似是说用栈超出生命周期的意思。我们看一下这个代码到底出了什么问题。*号出代码主要是调用了 一个i,然后转string。由于是多线程,所以可能出现这个循环跑完,线程都还没有跑起来,这个时候由于i的生命周期只在for循环内有效,所以当线程启动的时候,i已经没有了。所以出现了异常。
如何修复?这里直接把i作为参数直接传入lambda函数中。
for(int i = 0;i < 10;i++) {
Thread t = Thread::New([&url](int count){
String filename = String::New("./tmp/download/file")->append(Integer::New(count)->toString());
ArchiveConnection c = ArchiveConnection::New(url);
c->connect();
c->download(String::New("testdata"),filename);
},i);
t->start();
}