在线程错误 C2064 中:term 的计算结果不为 0 个参数的函数

In Threading error C2064: term does not evaluate to a function taking 0 arguments

本文关键字:函数 参数 结果 计算 C2064 错误 term 线程      更新时间:2023-10-16

我开始写我的第一个线程教程,我正在创建一个单线程生产者和消费者。它尚未完成,同步仍然存在。但它不是编译,我不明白这个错误意味着缺少或错误的参数是什么。下面是我的代码。

#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["  <<"]n";
    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 mutexn";
    }
    else {
        cout << "Created Mutexn";
    }
    producerConsumer p;
    p.startProducerConsumer();
    if (ReleaseMutex(gMutex)) {
        cout << "Failed to release mutexn";
    }
    else {
        cout << "Relested Mutexn";
    }
    gMutex = NULL;
    system("pause");
    return 0;
}

非静态成员函数需要一个对象来调用。此对象可以作为第二个参数传递给 std::thread 构造函数(作为指针或引用(:

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