如何使用QtConcurrent::run()创建多个线程

如何使用QtConcurrent::run()创建多个线程,qt,Qt,我尝试在循环中运行QtConcurrent::run(),但程序崩溃:(我正在使用libsmbclient) void Scanner::scan() { 对于(int i=0;iI假设没有共享数据,这会导致问题。无论如何,libsmbclient不是线程安全库。可能有一些全局变量同时被访问。如果他们没有承诺线程安全,你就不能假设任何。你能试着在函数调用周围使用互斥锁吗?成功了,现在没有崩溃。但是它似乎已经挫败了多线程的目的,扫描的速度与使用单个线程的速度相似。任何想法!smbc_opendir

我尝试在循环中运行QtConcurrent::run(),但程序崩溃:(我正在使用libsmbclient)

void Scanner::scan()
{

对于(int i=0;iI假设没有共享数据,这会导致问题。无论如何,libsmbclient不是线程安全库。可能有一些全局变量同时被访问。如果他们没有承诺线程安全,你就不能假设任何。你能试着在函数调用周围使用互斥锁吗?成功了,现在没有崩溃。但是它似乎已经挫败了多线程的目的,扫描的速度与使用单个线程的速度相似。任何想法!smbc_opendir()可能是一个阻塞函数,它导致了不必要的序列化。
void Scanner::scan()
{
    for(int i=0;i<ipList.length();i++)
    {
        QtConcurrent::run(this,&Scanner::scanThread,i);
    }
}
void Scanner::scanThread(int i)
{
int dh;
QString ip;
ip="smb://"+ipList[i]+"/";
dh= smbc_opendir(ip.toAscii());  // debugger points to this location
if(dh<0)
    return;
emit
        updateTree(i,dh);         // on commenting this line, it still crashes 
}