c ++ - I Threading Error C2064: Termen evaluerer ikke til en funktion, der tager 0 argumenter

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er begyndt at skrive min første tråd tutorial,
Jeg skaber en enkelt trådproducent og forbruger.
Den er ikke færdig endnu, synkronisering er tilbage.
Men det er ikke kompilering, jeg forstår ikke, hvad denne fejl betyder, hvilket argument mangler eller er forkert.
Nedenfor er min kode.


#include<iostream>
#include<thread>
#include<sstream>
#include<list>
#include<mutex>
#include<Windows.h>

using namespace std;

#define BUCKET\_LEN 5

HANDLE gMutex = NULL;
HANDLE gSemFull = NULL;
HANDLE gSemEmpty = NULL;

class producerConsumer  {
    long i;
    list<wstring> que;
public:
    producerConsumer() {
        i = 0;
        que.clear();
    }
    void produce();
    void consumer();
    void startProducerConsumer();
};

void producerConsumer::produce() {
    std::wstringstream str;
    str << "Producer["  <<"]
";
    que.push\_back(str.str());
}

void producerConsumer::consumer() {
    wstring s = que.front();
    cout << "Consumer[" << "]";
    wcout << " " << s;
    que.pop\_front();
}

void producerConsumer::startProducerConsumer() {
    std::thread t1(&producerConsumer::produce);
    std::thread t2(&producerConsumer::consumer);
    t1.joinable() ? t1.join() : 1;
    t2.joinable() ? t2.join() : 1; 
}

int main()
{
    gMutex = CreateMutex(NULL, FALSE, NULL);
    if (NULL == gMutex) {
        cout << "Failed to create mutex
";
    }
    else {
        cout << "Created Mutex
";
    }

    producerConsumer p;
    p.startProducerConsumer();

    if (ReleaseMutex(gMutex)) {
        cout << "Failed to release mutex
";
    }
    else {
        cout << "Relested Mutex
";
    }
    gMutex = NULL;
    system("pause");
    return 0;
}

Bedste reference


Ikke-statiske medlemsfunktioner har brug for en objekt , der skal aktiveres. Dette objekt kan bestilles (som en pointer eller reference) som et andet argument til std::thread konstruktøren:


std::thread t1(&producerConsumer::produce, this);
std::thread t2(&producerConsumer::consumer, this);