2016-06-01 6 views
1

Quelqu'un peut-il fournir un exemple de commande pour compiler une application qui utilise des mutex et des threads avec mingw. Quand j'ai essayé de le faire avec commande i686-w64-mingw32-g++ -std=c++11 -lpthread -o myprog.exe myprog.cpp Je suis une erreur que mutex n'est pas déclaré main.cpp:15:1: error: ‘mutex’ does not name a typeCompilez l'application multithread pour Windows sur Linux [C++]

Voici le code:

#include <iostream> 
#include <thread> 
#include <vector> 
#include <future> 
#include <mutex> 
#include <ctime> 
#include <cstring> 

using namespace std; 


#define MAX_SIZE_OF_THE_WORD 15 
int nCount = 0; 

mutex Mutex; 



char * MakeWord(){ 
    srand (time(NULL)); 
    int Size = rand() % MAX_SIZE_OF_THE_WORD; 
    char Array[Size]; 
    for (auto &w : Array){ 
     srand (time(NULL)); 
     w = (char)(rand()%50); 
    } 
    return Array; 
} 



bool HelloWorldShow(char * YOUR_TEXT){ 
    lock_guard<mutex> M(Mutex); 
    cout<<"Hello World number --- "<< nCount <<" And here is your text --- "<<YOUR_TEXT<<endl; 
    nCount++; 
    if (strlen(YOUR_TEXT) > 3) { 
     return true; 
    } 
    else{ 
     throw runtime_error(false); 
    } 

} 



int main() { 

    int nNum; 
    cout<<"Enter number of threads"<<endl; 
    cin>>nNum; 
    if (nNum >= 50){ 
     cout<< "Restart program and open less than 50 threads"<<endl; 
     return 0; 
    } 

    vector<future<bool>> a_Futures; 
    const char * Words[nNum]; 
    for (auto &w : Words){ 
     w = MakeWord(); 
    } 

    for(int i =0; i< nNum; i++){ 
     a_Futures.push_back(async(launch::async, &HelloWorldShow, (char *)Words[i])); 
    } 




     try { 
      for(auto &f : a_Futures) { 
       bool nRes = f.get(); 
      } 

     } 
     catch (exception & ex) { 
      cout<<"Exiting..."<<endl; 
     } 




    return 0; 
} 

Alors ... voici le code à l'aide de cette bibliothèque qui était fourni par @Smeeheey

#undef _GLIBCXX_HAS_GTHREADS 
#include <iostream> 
#include "mingw.thread.h" 
#include <mutex> 
#include "mingw.mutex.h" 
#include "mingw.condition_variable.h" 
#include <vector> 
#include <future> 
#include <ctime> 
#include <cstring> 

using namespace std; 


#define MAX_SIZE_OF_THE_WORD 15 
int nCount = 0; 

mutex Mutex; 



char * MakeWord(){ 
    srand (time(NULL)); 
    int Size = rand() % MAX_SIZE_OF_THE_WORD; 
    char Array[Size]; 
    for (auto &w : Array){ 
     srand (time(NULL)); 
     w = (char)(rand()%50); 
    } 
    return Array; 
} 



bool HelloWorldShow(char * YOUR_TEXT){ 
    lock_guard<mutex> M(Mutex); 
    cout<<"Hello World number --- "<< nCount <<" And here is your text --- "<<YOUR_TEXT<<endl; 
    nCount++; 
    if (strlen(YOUR_TEXT) > 3) { 
     return true; 
    } 
    else{ 
     throw runtime_error(false); 
    } 

} 



int main() { 

    int nNum; 
    cout<<"Enter number of threads"<<endl; 
    cin>>nNum; 
    if (nNum >= 50){ 
     cout<< "Restart program and open less than 50 threads"<<endl; 
     return 0; 
    } 

    vector<future<bool>> a_Futures; 
    const char * Words[nNum]; 
    for (auto &w : Words){ 
     w = MakeWord(); 
    } 

    for(int i =0; i< nNum; i++){ 
     a_Futures.push_back(async(launch::async, &HelloWorldShow, (char *)Words[i])); 
    } 




     try { 
      for(auto &f : a_Futures) { 
       bool nRes = f.get(); 
      } 

     } 
     catch (exception & ex) { 
      cout<<"Exiting..."<<endl; 
     } 




    return 0; 
} 

mais j'ai encore une erreur, mais cette fois il est erreur: déclaration de « classe std :: avenir »

Répondre

2

Vous devez

  1. Vérifiez que vous #include <mutex> dans votre fichier source

  2. Soit utiliser std::mutex ou ont using namespace std en haut de votre fichier source.

EDIT (VU le code): Il semble mingw32 ne supporte toujours pas 11 C++ threads natif. Vous pouvez soit basculer sur mingw64, soit utiliser this library, ce qui ajoute un support de thread std.

+0

J'ai ajouté un code –

+0

Pouvez-vous s'il vous plaît ajouter le message d'erreur exacte – Smeeheey

+0

Ajouté le message d'erreur –