Я реализую библиотеку протоколов. Вот упрощенное описание.Прекратить беззаметную нить мгновенно без прерывания или приостановки
Основной поток в основной функции всегда будет проверять, доступны ли некоторые данные в сетевом потоке (внутри tcpclient). Скажем, ответ - это принятое сообщение, а поток - работающий поток.
thread = new Thread(new ThreadStart(function));
thread.IsBackground = true;
thread.Start();
while(true){
response = receiveMessage();
if (response != null)
{
thread.Suspend();
//I am searching for an alternative for the line above and not thread.Abort().
thread2 = new Thread(new ThreadStart(function2));
thread2.IsBackground = true;
thread2.Start();
}
}
До сих пор так хорошо, есть на самом деле больше сообщений, чтобы прийти в то время цикла и есть также StateMachine для обработки разного рода входящих сообщений, но это должно быть достаточно. (Есть также не только функции «функция» и «функция2»).
Так или иначе, как функции выглядят внутри, в этом приложении неясно, поскольку протокол скрыт от программиста и предназначен для библиотеки. Это означает, что протокол запустит некоторые определенные программистом функции в виде потока в зависимости от того, в каком состоянии в протоколе есть программа.
Итак, если получен специальный отклик (например, сообщение CallAnotherFunction), я хочу закончить поток (здесь называется «поток»), скажем, в течение 100 мс. Но я не знаю, выполняется ли он в цикле или без, и сколько требуется обработки, пока оно не завершится.
Как остановить эти потоки без устаревших функций приостановки или исключения из-за прерывания? (Обратите внимание, что я не могу заставить программиста выполнять функции ThreadAbortException.)
Или мне нужна другая программная архитектура? (Btw Я решил поместить цикл в receiveMessage для опроса сетевого потока в главную функцию, так как в любое время может появиться сообщение).
Мы что-то упускаем? Изменить while (true), while (keepLooping), а затем внутри цикла, если вы обнаружите, что вы не устанавливаете его в false, поток заканчивается изящно ???? –