jeudi 23 juillet 2020

How do I make this pthread sleep for milliseconds instead of seconds?

#include <sys/time.h>
#include <pthread.h>
#include <cstdio>
#include <iostream>

timespec m_timeToWait;
pthread_mutex_t m_lock;
pthread_cond_t m_cond;

timespec & calculateNextCheckTime(int intervalSeconds){
    timeval now{};
    gettimeofday(&now, nullptr);
    m_timeToWait.tv_sec = now.tv_sec + intervalSeconds;
    //m_timeToWait.tv_nsec = (1000 * now.tv_usec) + intervalSeconds;
    return m_timeToWait;
}

void *run(void *){
    int i = 0;
    pthread_mutex_lock(&m_lock);
    while (i < 10) {
        std::cout << "Waiting .." << std::endl;
        int ret = pthread_cond_timedwait(&m_cond, &m_lock, &calculateNextCheckTime(1));

        std::cout << "doing work" << std::endl;
        i++;
    }
    pthread_mutex_unlock(&m_lock);
}

int main()
{
    pthread_t thread;
    int ret;
    int i;
    std::cout << "In main: creating thread" << std::endl;
    ret = pthread_create(&thread, NULL, &run, NULL);
    pthread_join(reinterpret_cast<pthread_t>(&thread), reinterpret_cast<void **>(ret));
    return 0;
}

There are similar examples on SO, but I can't seem to figure it out. Also, the Clion IDE insists that I use re-interpret casts on the pthread_join params, even though examples on SO don't have those casts in place. I am using C++11.

Aucun commentaire:

Enregistrer un commentaire