git-svn-id: svn://db.shs.com.ru/pip@276 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2016-10-06 12:38:32 +00:00
parent 6166ec5931
commit 03ffe5d6bc

View File

@@ -33,7 +33,7 @@ public:
PIPipelineThread() { PIPipelineThread() {
cnt = 0; cnt = 0;
max_size = 0; max_size = 0;
wait_next_pipe = true; wait_next_pipe = false;
next_overload = false; next_overload = false;
} }
~PIPipelineThread() { ~PIPipelineThread() {
@@ -48,7 +48,8 @@ public:
EVENT_HANDLER1(void, enqueue, const Tin &, v) {enqueue(v, 0);} EVENT_HANDLER1(void, enqueue, const Tin &, v) {enqueue(v, 0);}
EVENT_HANDLER2(void, enqueue, const Tin &, v, bool *, overload) { EVENT_HANDLER2(void, enqueue, const Tin &, v, bool *, overload) {
mutex.lock(); mutex.lock();
if (max_size > 0 && in.size() < max_size) { // piCout << "enque" << max_size << in.size();
if (max_size == 0 || in.size() < max_size) {
in.enqueue(v); in.enqueue(v);
if (overload) *overload = false; if (overload) *overload = false;
} else { } else {
@@ -104,7 +105,7 @@ public:
void setMaxQueSize(uint count) { void setMaxQueSize(uint count) {
mutex.lock(); mutex.lock();
count = max_size; max_size = count;
if (max_size > 0 && in.size() > max_size) in.resize(max_size); if (max_size > 0 && in.size() > max_size) in.resize(max_size);
mutex.unlock(); mutex.unlock();
} }
@@ -125,17 +126,20 @@ private:
return; return;
} }
if (next_overload && wait_next_pipe) { if (next_overload && wait_next_pipe) {
mutex.unlock();
calculated(last, &next_overload); calculated(last, &next_overload);
piMSleep(10);
} else { } else {
Tin t = in.dequeue(); Tin t = in.dequeue();
bool ok = true;
mutex.unlock(); mutex.unlock();
bool ok = true;
Tout r = calc(t, ok); Tout r = calc(t, ok);
if (ok) { if (ok) {
mutex_l.lock(); mutex_l.lock();
last = r; last = r;
mutex_l.unlock(); mutex_l.unlock();
cnt++; cnt++;
// next_overload = true;
calculated(r, &next_overload); calculated(r, &next_overload);
} }
} }