fix stroke preview priority

This commit is contained in:
2019-03-16 11:10:21 +01:00
parent 1db422ae78
commit ad0b444629

View File

@@ -153,7 +153,7 @@ template<typename T, int Max = 0>
class BlockingQueue
{
public:
std::deque<T> q;
std::deque<std::pair<T, bool>> q;
std::condition_variable post_cv;
std::condition_variable get_cv;
mutable std::mutex mutex;
@@ -171,7 +171,7 @@ public:
post_cv.wait(lock, [&]() { return unlocked | (q.size() < Max); });
if (q.size() >= Max) return;
}
q.push_back(pkt);
q.push_back({ pkt, false });
get_cv.notify_one();
}
void PostUnique(T pkt, bool top)
@@ -182,8 +182,20 @@ public:
post_cv.wait(lock, [&]() { return unlocked | (q.size() < Max); });
if (q.size() >= Max) return;
}
if (std::find(q.begin(), q.end(), pkt) == q.end())
top ? q.push_front(pkt) : q.push_back(pkt);
auto search = std::make_pair(pkt, top);
if (std::find(q.begin(), q.end(), search) == q.end())
{
if (top)
{
// find the first low priority
auto low = std::find_if(q.begin(), q.end(), [](auto const& x) { return x.second == false; });
q.insert(low, { pkt, top });
}
else
{
q.push_back({ pkt, top });
}
}
get_cv.notify_one();
}
T Get()
@@ -193,10 +205,10 @@ public:
get_cv.wait(lock, [&]() { return unlocked | (q.size() > 0); });
if (q.empty())
return std::move(emptyT);
T tmp = std::move(q.front());
auto tmp = std::move(q.front());
q.pop_front();
if (Max > 0) post_cv.notify_all();
return std::move(tmp);
return std::move(tmp.first);
}
void UnlockGetters()
{