Аналог Java Thread.interrupted()
От: Аноним  
Дата: 06.06.12 06:07
Оценка:
Привет

В Java Thread.interrupted() проверяет был ли вызван для потока метод Thread.Interrupt()
В .NET аналогичного метода нет. Может кто-нибудь знает хоршую реализацию/обходное решение для .NET?
Спасибо

PS:
Такое решение не подходит из-за переключения контекста при вызове Sleep(0)
Re: Аналог Java Thread.interrupted()
От: Caracrist https://1pwd.org/
Дата: 06.06.12 06:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет


А>В Java Thread.interrupted() проверяет был ли вызван для потока метод Thread.Interrupt()

А>В .NET аналогичного метода нет. Может кто-нибудь знает хоршую реализацию/обходное решение для .NET?
А>Спасибо

А>PS:

А>Такое решение не подходит из-за переключения контекста при вызове Sleep(0)

покури ThreadAbortException
~~~~~
~lol~~
~~~ Single Password Solution
Re[2]: Аналог Java Thread.interrupted()
От: Аноним  
Дата: 06.06.12 06:37
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>покури ThreadAbortException


Спасибо, но нет, Thread.Abort не подходит
Re[3]: Аналог Java Thread.interrupted()
От: Caracrist https://1pwd.org/
Дата: 06.06.12 06:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо, но нет, Thread.Abort не подходит


ThreadInterruptedException
+
Thread.Interrupt();
~~~~~
~lol~~
~~~ Single Password Solution
Re[4]: Аналог Java Thread.interrupted()
От: Аноним  
Дата: 06.06.12 06:46
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Здравствуйте, Аноним, Вы писали:


А>>Спасибо, но нет, Thread.Abort не подходит


C>ThreadInterruptedException

C>+
C>Thread.Interrupt();
C>

эмм???

ThreadInterruptedException происходит если для потока вызван thread.Interrupt() и сам поток пытается перейти в состояние WaitSleepJoin.
В первом посте есть ссылка на решение через ThreadInterruptedException. Оно не годится из-за переключений контекста.
Re[5]: Аналог Java Thread.interrupted()
От: Caracrist https://1pwd.org/
Дата: 06.06.12 07:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>эмм???


А>ThreadInterruptedException происходит если для потока вызван thread.Interrupt() и сам поток пытается перейти в состояние WaitSleepJoin.

А>В первом посте есть ссылка на решение через ThreadInterruptedException. Оно не годится из-за переключений контекста.

я понял(кажись) нужен один бит информации и доступ к нему через Thread object. Вроде как System.Threading.Thread такого не поставляет
Однако, могу предложить вариант, если потоки создаются через Factory:

class ThreadSpecificData
{
   public bool isInterrupted;
}

[ThreadStaticAttribute]
static ThreadSpecificData threadSpecificData;

static Dictionary<Thread, ThreadSpecificData> ThreadSpecificDataContainer = new Dictionary<int, ThreadSpecificData>();

static Thread MyCreateThread(ThreadStart threadStart)
{
   return new Thread( () => {
      lock(ThreadSpecificDataContainer) 
      {
         ThreadSpecificDataContainer[Thread.CurrentThread] = threadSpecificData = new ThreadSpecificData();
      }
      try
      {
         threadStart();
      }
      finaly
      {
         lock(ThreadSpecificDataContainer) 
         {
            ThreadSpecificDataContainer.Remove(Thread.CurrentThread);
         }
      }
   });
}

не компилировал, но идея надеюсь передана
~~~~~
~lol~~
~~~ Single Password Solution
Re[6]: Аналог Java Thread.interrupted()
От: Аноним  
Дата: 06.06.12 07:37
Оценка:
Здравствуйте, Caracrist, Вы писали:


C>я понял(кажись) нужен один бит информации и доступ к нему через Thread object.

Именно так


C>Однако, могу предложить вариант, если потоки создаются через Factory:

Идея понятна, но потоки могут создаваться как угодно . У меня есть только "код-в-потоке".
Re: Аналог Java Thread.interrupted()
От: Степанов Андрей  
Дата: 06.06.12 18:03
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Привет


А>В Java Thread.interrupted() проверяет был ли вызван для потока метод Thread.Interrupt()

А>В .NET аналогичного метода нет. Может кто-нибудь знает хоршую реализацию/обходное решение для .NET?
А>Спасибо

А>PS:

А>Такое решение не подходит из-за переключения контекста при вызове Sleep(0)

Не силен в Java, но если тебе надо прервать выполнение потока в тот момент, когда он к этому готов, то можно либо какую-нибудь переменную завести и проверять ее состояние, либо посмотреть в сторону CancellationToken.
Re: Аналог Java Thread.interrupted()
От: Danchik Украина  
Дата: 07.06.12 10:46
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Привет


А>В Java Thread.interrupted() проверяет был ли вызван для потока метод Thread.Interrupt()

А>В .NET аналогичного метода нет. Может кто-нибудь знает хоршую реализацию/обходное решение для .NET?
А>Спасибо

Этого достаточно?

public static class ThreadMonitor
{
   [ThreadStatic]
   private static bool _interrupted;
  
   public static void Interrupt()
   {
      _interrupted = true;
   }

   public static void IsInterrupted()
   {
      return _interrupted;
   }
}


Также можно манипулировать с Thread.GetData()
Re[2]: Аналог Java Thread.interrupted()
От: Caracrist https://1pwd.org/
Дата: 07.06.12 15:20
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Этого достаточно?

  Скрытый текст
D>
D>public static class ThreadMonitor
D>{
D>   [ThreadStatic]
D>   private static bool _interrupted;
  
D>   public static void Interrupt()
D>   {
D>      _interrupted = true;
D>   }

D>   public static void IsInterrupted()
D>   {
D>      return _interrupted;
D>   }
D>}
D>

D>Также можно манипулировать с Thread.GetData()

посмотри на предложенное мной
Автор: Caracrist
Дата: 06.06.12
и подумай, чем обусловленна разница в реализации...
~~~~~
~lol~~
~~~ Single Password Solution
Re[3]: Аналог Java Thread.interrupted()
От: Danchik Украина  
Дата: 25.09.12 13:08
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>посмотри на предложенное мной
Автор: Caracrist
Дата: 06.06.12
и подумай, чем обусловленна разница в реализации...


Интерестно и чем же они отличаются? Громоздкостью?
Re: Аналог Java Thread.interrupted()
От: Аноним  
Дата: 25.09.12 13:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет


А>В Java Thread.interrupted() проверяет был ли вызван для потока метод Thread.Interrupt()

А>В .NET аналогичного метода нет. Может кто-нибудь знает хоршую реализацию/обходное решение для .NET?
А>Спасибо

А>PS:

А>Такое решение не подходит из-за переключения контекста при вызове Sleep(0)

Thread.State ?
Re[4]: Аналог Java Thread.interrupted()
От: Caracrist https://1pwd.org/
Дата: 25.09.12 14:21
Оценка: 1 (1) +1
Здравствуйте, Danchik, Вы писали:

D>Интерестно и чем же они отличаются? Громоздкостью?


Возможностью доступа из другого потока, то есть работоспособностью, как таковой...
~~~~~
~lol~~
~~~ Single Password Solution
Re[5]: Аналог Java Thread.interrupted()
От: Danchik Украина  
Дата: 27.09.12 13:58
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Здравствуйте, Danchik, Вы писали:


D>>Интерестно и чем же они отличаются? Громоздкостью?


C>Возможностью доступа из другого потока, то есть работоспособностью, как таковой...


Чем я думал
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.