From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by sourceware.org (Postfix) with ESMTPS id 3C5913858002 for ; Mon, 29 Mar 2021 12:20:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 3C5913858002 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [92.105.5.174] ([92.105.5.174]) by web-mail.gmx.net (3c-app-gmx-bap72.server.lan [172.19.172.172]) (via HTTP); Mon, 29 Mar 2021 14:19:58 +0200 MIME-Version: 1.0 Message-ID: From: markus.forrer@gmx.ch To: pthreads-win32@sourceware.org Subject: Problems with conditions Content-Type: text/plain; charset=UTF-8 Date: Mon, 29 Mar 2021 14:19:58 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:Vr43wOZq3N9hF23zRMuMF7AJVwH6t7yO19r6AdPLKEVslCchQzmvgiojIvixA+T5P5txp +NegXaxYcmcImP8lJwbxR8TTAm6QBCP4OzQRKmd26VTzTwJMYalXLb3VrgKiBMRJYmQ7lyOY51mS CDyBriyPq0yHIdFuJ4hk7x/8zPYV5N5FNBw6SahD5VISr735QTStmPhdz+GAI3lp2SB5riNNIGb0 NVUc94boJ7Br3ltDuwpIENstiXj5wnA+53q9J20Z8Y9L6n1oaynlWE9spziqEM1OVnx6q3blQmul fY= X-UI-Out-Filterresults: notjunk:1;V03:K0:gFNgL3f+kyU=:ZE3L+71orsRfX/PQI2I728 h4cjQm1zaA2tNMaX71sNltTVu9sG3ZYhmApYpBKbDlaRe2PuNXBUj4mGN6e4I9hg6NMsqN6EM UGPLd/G+vWvzHpwlEagXsL5g7jJCzjRbUN96hdLJmitPbLs/IJqr1zv8hRi1xHa8be/QxJF1f nRqlVZQlmJb0FEpugPdo+VtiRU7HqcgW+R8rAd98E+jCQ+63l1jAeuzjDhouGFPORnH0TcuuA 3xTjRjH+HC0YoIUz6AKhTbFGedsm++0lw5moV9lmqZTaGq8YFaY4p2j++yRONUXWw0FAQjxn3 K/MXnRgaLAXyXheJvUvgtnBFlAsuEWrFApTIvd7zmVzkttLz/NIGZPKPq2h4JtJ82Z+pZi4fv Chj8HfE1bZldh2ugBQmmDGpcpm9I/qwHe7w3LmPGhUNs+bKqO5/SaxpJ1fP5KJDrhMmRORSWC v2Z+zEyI+bD/NZpY3nQI1/z/ld45L3r4Pt82h2x5znV8LAd8SY7HK5DX6EEHlxdgxPZE+k+ER 4hWNJENvOVqSWUHrbpKkHSH8I2uEVXu3CULuwENfENNvOJ+ZS7ZSq0XdMnam1J0YTVXqPznyz qR4JXXfaVwJAMT6uABVerlcbk9Fm063t3DpZzW/0AGYvOoxJNjhGvI6TI0h1JYEcWTy+bysgf 7T2J8ehTLDgh0CzXzujB+nNJU0SAQ4B/MAZg7+XJMjsGmwYFeyshR88ebayWAjvv7QLmkgFOn W0uq30DCEkqx592Bnfad5ZlxwHr4Kcg+Iohj5IS2NYnAhKNA6QkH21yquaHW6EuLhRnS7IA4l 2APIUHYvzH+YImr1bQavXeaYD6bXCL3UG/WqNsVv+OAxCzX5Jb1XMnB+0UxPOdVZ04T8PSZeM vz5WG6cY3u54zFEedEyYQsxJ+IDTZMrHx/mF0GWgr1J6dsPf2DDKiJ/2oA7TzK Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: pthreads-win32@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Pthreads-win32 mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Mar 2021 12:20:02 -0000 I have re-implemented the C++ class OSEvent for a Windows simulation that = exists for a Linux platform. Thereby I have the problem that the function = pthread_cond_wait() does not wait until pthread_cond_signal() is called. S= omething I have misunderstood. Many thanks for any hints! OSEvent::OSEvent() { pthread_condattr_init(&_conditionAttribute); pthread_cond_init(&_condition, &_conditionAttribute); pthread_mutexattr_init(&_mutexAttribute); pthread_mutexattr_settype(&_mutexAttribute, PTHREAD_MUTEX_ERRORCHECK); pthread_mutex_init(&_mutex, &_mutexAttribute); } OSEvent::~OSEvent() { pthread_cond_destroy(&_condition); pthread_condattr_destroy(&_conditionAttribute); pthread_mutex_destroy(&_mutex); pthread_mutexattr_destroy(&_mutexAttribute); } void OSEvent::signal() { pthread_mutex_lock(&_mutex); pthread_cond_signal(&_condition); pthread_mutex_unlock(&_mutex); } OSEventError OSEvent::timedwait(uint32_t timeout) { struct timespec timeoutTime; timeoutTime.tv_sec =3D timeout / 1000; timeoutTime.tv_nsec =3D 1000000 * (timeout % 1000); OSEventError success =3D OSEventError::NoError; pthread_mutex_lock(&_mutex); // Timeout forever if (timeout =3D=3D 0) { if (pthread_cond_wait(&_condition, &_mutex) !=3D 0) { success =3D OSEventError::Timeout; } } // Timeout time else { if (pthread_cond_timedwait(&_condition, &_mutex, &timeoutTime) != =3D 0) { success =3D OSEventError::Timeout; } } pthread_mutex_unlock(&_mutex); return success; }