2016-03-24 12 views
0

Bir döngü içinde sürekli olarak çalışacak ve yalnızca önceki iş parçacığı kapalıysa bir iş parçacığı çalıştıracak bir program yazmaya çalışıyorum. İlk if ifadesinin dışında iş parçacığının durumunu kontrol edemiyorum çünkü ilk ifade ifadesinde status bildirildi. İlk ifadenin içindeki durumu kontrol edersem tamamen kilitlenirim. İş parçacığının ana programa katılmadan bunu aşmak için nasıl bir şey uygulayabilirim?Kilitle iç döngüdeki işlem yürütme

int script_lock = 1; //lock is open 
    while (true) { 

     if (script_lock == 1) { 
      script_lock = 0; //lock is closed 
      auto future = async (script, execute); //runs concurrently with main program 
      auto status = future.wait_for(chrono::milliseconds(0));  
     } 

     if (status == future_status::ready) { //status not declared in scope 
      script_lock = 1; //lock is open 
     } 

     //do extra stuff 
    } 
+0

sadece while' '' sonra status' hakkını beyan edemez şu şekildedir:

Sen kodunu kolaylaştırabilirsiniz? – 4386427

cevap

0

Bu kod bir sorunu var: script_lock0 eşit hale gelir ve ilk kez status == future_status::ready ardından script_lock değerini asla değişmeyecek başarısız olursa.

bool finished = true; 
while (true) { 
    // Define future here 

    if (finished){ 
     future = async (script, execute); 
     finished = false; 
    } 

    if (future.wait_for(chrono::milliseconds(0)) == future_status::ready) 
      finished = true; 

    //do extra stuff 
} 
+0

'hata: '.' Jetonundan önce şablon argümanları eksik. (eğer future.wait_for (chrono :: milisaniye (0)) == future_status :: hazır)' –

+0

Evet, geleceğin tam türünü öğrenmek zorundasın. 'async' çağrılmadan önce tanımlandığı gibi otomatik değil ve gerekirse uygun şablon argümanları ekleyin. – Claudio