我开始编写我的第一个线程教程, 我正在创建一个单线程生产者和消费者。 尚未完成,同步仍在继续。 但它没有编译,我不明白这个错误意味着哪个论点缺失或错误。 以下是我的代码。
#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 mutex\n";
}
else {
cout << "Created Mutex\n";
}
producerConsumer p;
p.startProducerConsumer();
if (ReleaseMutex(gMutex)) {
cout << "Failed to release mutex\n";
}
else {
cout << "Relested Mutex\n";
}
gMutex = NULL;
system("pause");
return 0;
}
答案 0 :(得分:3)
非静态成员函数需要调用对象。该对象可以作为指针或引用作为std::thread
构造函数的第二个参数传递:
std::thread t1(&producerConsumer::produce, this);
std::thread t2(&producerConsumer::consumer, this);