2009-03-10 9 views
3

Ich möchte zwei Warteschlangen verwenden, wobei die erste Warteschlange die Daten in die Warteschlange verschiebt und der zweite Thread die Daten aus der Warteschlange entfernt. Kann mir jemand bei der Implementierung in VC++ helfen?Verwendung von Threads und Warteschlange in VC++

Ich bin neu in den Threads und der Warteschlange.

+0

Hallo Dheer, ist meine Anforderung gibt es eine Funktion, die einen Thread erstellt und übergibt die Daten für die Weiterverarbeitung, die Leere MyFunc (char * data) sieht aus wie { Createthread (NULL, 0, build_data, (void *) Daten, 0, NULL); } Jetzt möchte ich den obigen Code ändern. –

+0

Ich möchte eine Warteschlangenklasse einführen und zwei Threads erstellen, sodass der erste Thread eine Funktion aufrufen kann, die die Daten in die Warteschlange schreibt, und der zweite Thread die Daten aus der Warteschlange liest. Bitte stellen Sie bei Bedarf Mutex vor. Können Sie mir sagen, wie Sie das oben in VC++ implementieren. Danke, –

Antwort

1

Hier ein paar Hinweise und einige Codebeispiel:

std::queue<int> data; // the queue 
boost::mutex access; // a mutex for synchronising access to the queue 
boost::condition cond; // a condition variable for communicating the queue state 

bool empty() 
{ 
    return data.empty(); 
} 

void thread1() // the consumer thread 
{ 
    while (true) 
    { 
    boost::mutex::scoped_lock lock(access); 
    cond.wait(lock, empty); 
    while (!empty()) 
    { 
     int datum=data.top(); 
     data.pop(); 

     // do something with the data 
    } 
    } 
} 

void thread2() // the producer thread 
{ 
    while (true) 
    { 
    boost::mutex::scoped_lock lock(access); 
    data.push_back(1); // guaranteed random by a fair dice roll 
    cond.notify_one();   
    } 
} 

int main() 
{ 
    boost::thread t1(thread1); 
    boost::thread t2(thread2); 
    t1.join(); 
    t2.join(); 

    return 0; 
} 

ich eine queue vom STL verwendet und threads , condition variables und mutexes aus der Boost Bibliothek. Das Zeug in Boost ist so ziemlich das, was in der standard C++ library in a few yearsso it is good to be familiar with it sein wird.

Ich habe nur den Code eingegeben, ich habe keine Möglichkeit, es zu testen. Sie werden wahrscheinlich Fehler finden. Dies ist eine gute Sache, Threaded Code ist schwierig und der beste Weg, um es gut zu machen ist viel Übung.

+0

Hallo, meine Anforderung ist, es gibt eine Funktion, die einen Thread erstellt und die Daten für die weitere Verarbeitung übergibt wie Void MyFunc (Char * Daten) {CreateThread (NULL, 0, Build_Data, (void *) Daten, 0, NULL); } Jetzt möchte ich den obigen Code ändern –

+0

Ich möchte eine Warteschlangenklasse einführen und zwei Threads erstellen möchten, damit der erste Thread eine Funktion aufrufen kann, die die Daten in die Warteschlange schreibt und der zweite Thread die Daten aus der Warteschlange liest. Bitte führen Sie Mutex bei Bedarf ein. Können Sie mir sagen, wie Sie das oben genannte in VC++ implementieren? Danke –

+0

Nicht wirklich leid, sollten Sie wahrscheinlich eine neue Frage erstellen, die den gesamten Code enthält, den Sie derzeit haben. Ich verstehe die Anforderung nicht wirklich –

Verwandte Themen