2016-03-30 22 views
1

Gördüğünüz gibi, birkaç iş parçacığı oluşturmak istiyorum.Şimdi iş parçacığı sayısı konsoldan aldığım komut satırı bağımsız değişkenine bağlıdır, temel olarak oluşturulacak iş parçacıklarının olmaması gerekir dinamik ancak C++ 11'deki iş parçacığı nesnesinin nesnesini oluşturmak, bir const boyutu verilmesini gerektirir ve bu, bir değişken kullanılmadan başlatıldığında yalnızca "num_threads" kabul edildiği için benim sorunumun oluştuğu yerdir (i., e bir literal kullanarak.
gibi: durumunda static const int num_threads=10;
Ama: static const int num_threads=stoi(argv[1]);iş parçacığı dinamik boyutu koymak nasıl

int main(int argc, char *argv[]) 
{ 
    if(argc!=2) 
    { 
    cout << "\n Invalid arguments \n"; 
    return 0; 
    } 

    static const int num_threads = 10;// stoi(argv[1]);// 
    thread t[num_threads]; 


//Launch a group of threads 
for (int i = 0; i < num_threads; ++i) 
{ 
    t[i] = std::thread(call_from_main_to_connect_info_disconnect, i); 
} 

std::cout << "Launched from the main\n"; 

//Join the threads with the main thread 
for (int i = 0; i < num_threads; ++i) 
{ 
    t[i].join(); 
} 

getchar(); 
return err; 

} 

Herhangi önerileri komut satırından girişi yoluyla dinamik iş parçacığı hiçbir olması amacıyla?

+3

kullanın dinamik dizide Eğer c yeniden beri "dinamik dendiğinde, veya ++ std :: vector' – DimChtz

+1

C' kullanmak ++ dizisi "şimdi düşünmelisiniz [' std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). –

cevap

4

Sen kullanabilirsiniz:

std::thread *t = new std::thread[num_threads]; 

veya std::vector kullanarak:

std::vector<std::thread> t(num_threads); 
+0

genius şeyler DimChtz .. benim için çalıştı. Ve benim için bu fikir düşünmüş olmalıyım gibi aptalca.Yeni operatörün kullanımı, yığın üzerinde tahsis edilecek ve adresi bir işaretçiye (sınıf iş parçacığının türüne) iletecektir. Doğrumuyum? Lütfen hayır söyle. –

+0

@SUMITKUMARSINGH Evet, siz haklısınız :) – DimChtz

İlgili konular