git-svn-id: svn://db.shs.com.ru/pip@276 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user