これは、ユーザーが何かを入力するのを(無限ループを使用して)待ち、キューに格納するstart()関数を持つシンプルなプログラムです。 start()は別のスレッドで実行されます。ユーザーがある値を入力すると、キューのサイズはメインのままです。キューはどのように同期できますか?
コード:source.cpp
2つのスレッド間のキューの同期
#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();
}
コード: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);
}
}
}
を使用すると、ヘッダファイルでキューの「静的」を使用するので、あなたは実際に2つの異なるキュー、各CPPの1を持っている完全なコード – user6275035
を追加しましたファイル。それで、メインのものは常に空です。 – tony
@tony静的な削除時のリンカエラーを示します。 – user6275035