Зависание потока при PInvoke - C#

Узнай цену своей работы

Формулировка задачи:

Есть нативная дллка, которая является оберткой для одной проги. Когда эта прога выключается происходит зависание потока, который обращался к ней через эту нативную длл. Если поток завис, то его ничем не убить (ну разве что терминат трэд должен помочь). Если вызвать для зависшего потока Abort, то вызывающий поток тоже зависает намертво. Пытался выгружать длл в отдельном потоке. Не помогло. В гугле где-то видел, что мол это нерешаемо, и нужно в отдельном ехе запускать дллку ту, и убивать ее в случае зависания и организовывать связь между ехешниками. Но так я буду делать если будет совсем кранты, уж очень костыльно и ненадежно. Может кто сталкивался с этим?

Решение задачи: «Зависание потока при PInvoke»

textual
Листинг программы
using System;
using System.Threading;
 
namespace ConsoleApplication62
{
    class Program
    {
        static void Main()
        {
            int x = 0;
            var t = new Thread(() => x = Foo());
            t.Start();
            t.Join(TimeSpan.FromSeconds(3));
            if (t.IsAlive)
            {
                Console.WriteLine("Все пропало, шеф!");
                t.Abort();
            }
            else 
                Console.WriteLine("Все ок, полученное значение = {0}", x);
            Console.ReadKey();
 
        }
 
        static int Foo()
        {
            var r = new Random().Next(10);
            if (r%2 == 0)
                return r;
            while (true)
            {
                // зависло
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы