C# - Block master-thread until slave-thread executed ManualResetEvent.WaitOne()
NickName:Funky Ask DateTime:2022-06-13T17:56:15

C# - Block master-thread until slave-thread executed ManualResetEvent.WaitOne()

I've a question regarding thread handling in C#:

I have a master thread who creates a slave thread with

pollthread = new Thread(doPollThread);
pollthread.Start(this);

I have a

ManualResetEvent resetevent

the slave thread executes an endless loop like

private static void doPollThread(object thisObject){

    SpeedCounterDevice sc = (SpeedCounterDevice) thisObject;
    while (true) {

        sc.resetevent.WaitOne();

        //do some work ....

        Thread.Sleep(400);

    }
}

The purpose of the slave thread is to poll an external device through a network socket (how are you .. how are you ... get measurement result ... how are you ....) but this socket is created in functions of the master thread And I want to connect the socket through an UI-Button-Press, disconnect through the UI, connect again, .... in the master thread So control of the socket should belong to the master thread, only the actual data transfer over the network should be done by the slave

Now I want to suspend the slave thread in a function running in the master thread like

resetevent.Reset();

to disconnect the network connection later on when the slave loop is finished

But then I want to wait in the master thread (block it) until the slave thread executed WaitOne(), but without any possibility to come into a deadlock or something else problematic ... (I want to finish the loop without interrupt it)

Yes, you can create another ResetEvent, block the master thread, but if the slave is getting the resetEvent right between signalling the master thread and executing WaitOne(), he will sleep but will not wake up the master thread ...

Is there any safe nice way to solve this problem?

Thank you!

Regards, Hans Juergen

Copyright Notice:Content Author:「Funky」,Reproduced under the CC 4.0 BY-SA copyright license with a link to the original source and this disclaimer.
Link to original article:https://stackoverflow.com/questions/72600946/c-sharp-block-master-thread-until-slave-thread-executed-manualresetevent-waito

More about “C# - Block master-thread until slave-thread executed ManualResetEvent.WaitOne()” related questions

Is there any difference between C c; and C c = C();?

#include<iostream> using namespace std; class C{ private: int value; public: C(){ value = 0; cout<<"default constructor"<<endl; }

Show Detail

Rebinding C-c to C-c

I'm using Viper, and I want to change its C-c and C-g to the original emacs functions. I can rebind C-g with (define-key viper-vi-global-user-map "C-g" 'keyboard-quit), but how can I rebind C-c, si...

Show Detail

Why value of variable c in (c=c==c) is 2 instead of 1,in C programming?

#include<stdio.h> int main() { int a=10,b=2,c; a=!++b&&(c=c==c); printf("b value is %d \n",b); printf("c value is %d \n",c);

Show Detail

The difference between "C c = new C()" and "A c = new C()" when C is a subclass of A in Java

Let's say we have class A as a parent class, and class C that extends it. class A { void m() { System.out.println("A.m"); } } class C extends A { @Override v

Show Detail

Mounting of /cygdrive/c resolves to C:\cygdrive\c

I am using Cygwin and try to run a bash script which uses the pwd command to construct a path and then generate a directory. The problem is that the directory is created under c:\cygdrive\c rather ...

Show Detail

Prefix key `C-S-c` is echoed as `C-c`

When I press C-S-c, the echo area shows only C-c. Things like C-S- selection do work, however. I'm in Ubuntu 14.10 Utopic Unicorn in case this helps. Here's the code for the key binding (for mul...

Show Detail

What is the difference between C, C99, ANSI C and GNU C?

I have started programming practice on codechef and have been confused by the difference between C and C99. What does C mean here? Is it C89? Check the languages at the bottom of this submit. It co...

Show Detail

Is C# a superset of C?

Is C# a superset of C in anyway, like Objective-C or C++? Is there a way to compile C online with constructs such compiler flags?

Show Detail

C - Scope of C Functions

I apologize if this is a beginner's question, but after working in C for a bit, I finally would like a bit of clarification on exactly what kind of files/functions are available to a function. I

Show Detail

Why a != b != c is not equal to a != b and a != c and b != c?

I want to check if 3 values a, b , c are not equal to each other. Given that a == b == c equals to a == b and b == c and a == c, why does python give a different answer for a != b != c ? Thanks! ...

Show Detail