condvar fixes

This commit is contained in:
2022-11-10 14:11:40 +03:00
parent 15a9d68a87
commit 4994d0bf66
3 changed files with 15 additions and 7 deletions

View File

@@ -839,7 +839,7 @@ PIObject::Deleter::Deleter() {
PRIVATE->thread.setSlot([this](){
PIVector<PIObject*> oq;
PRIVATE->thread.lock();
PRIVATE->cond_var.wait(PRIVATE->thread.mutex());
if (PRIVATE->obj_queue.isEmpty()) PRIVATE->cond_var.wait(PRIVATE->thread.mutex());
oq.swap(PRIVATE->obj_queue);
PRIVATE->thread.unlock();
for (PIObject * o : oq) deleteObject(o);
@@ -851,9 +851,7 @@ PIObject::Deleter::Deleter() {
PIObject::Deleter::~Deleter() {
//piCout << "~Deleter ...";
PRIVATE->thread.stop();
PRIVATE->thread.mutex().lock();
PRIVATE->cond_var.notifyAll();
PRIVATE->thread.mutex().unlock();
PRIVATE->thread.waitForFinish();
for (PIObject * o : PRIVATE->obj_queue) deleteObject(o);
//piCout << "~Deleter ok";

View File

@@ -278,9 +278,7 @@ bool _PITimerImp_Thread::startTimer(double interval_ms) {
bool _PITimerImp_Thread::stopTimer(bool wait) {
thread_.stop();
thread_.mutex().lock();
event.notifyAll();
thread_.mutex().unlock();
if (wait) return thread_.waitForFinish();
// if (wait)
// if (!thread_.waitForFinish(10))

View File

@@ -87,7 +87,7 @@ void phase(const char * msg) {
}
int main(int argc, char * argv[]) {
piCout << "main";
/*piCout << "main";
PITimer timer;
timer.setSlot([](){
@@ -101,7 +101,19 @@ int main(int argc, char * argv[]) {
PITimeMeasurer tm;
timer.stop();
double tm_ms = tm.elapsed_m();
piCout << "stop took" << tm_ms;
piCout << "stop took" << tm_ms;*/
PIWaitEvent event;
event.create();
tm.reset();
PIThread::runOnce([&event](){
//piMSleep(100);
piCout << "interrupt";
//event.interrupt();
});
event.sleep(2010000);
double tm_ms = tm.elapsed_m();
piCout << "waited for" << tm_ms;
return 0;
/*for (int i = 0; i < count; ++i)