这是一个简单的程序,它有一个名为 start() 的函数,该函数通过使用无限循环等待用户输入并将其存储在队列中。start() 在单独的线程中运行。用户输入某个值后,在主程序中队列的大小仍为零。如何同步队列?
代码:source.cpp
#include <iostream>
#include "kl.h"
using namespace std;
int main()
{
std::thread t1(start);
while (1)
{
if (q.size() > 0)
{
std::cout << "never gets inside this if\n";
std::string first = q.front();
q.pop();
}
}
t1.join();
}
code: kl.h
#include <queue>
#include <iostream>
#include <string>
void start();
static std::queue<std::string> q;
代码:kl.cpp
#include "kl.h"
using namespace std;
void start()
{
char i;
string str;
while (1)
{
for (i = 0; i <= 1000; i++)
{
//other stuff and str input
q.push(str);
}
}
}
std::queue<std::string> q;
。头文件说“这个东西存在于某个地方”,cpp文件说“它在这里”。更好的方法是,在main函数中将其设为静态变量,从头文件中删除它,并通过引用传递到线程函数中。 - tony