В каком потоке исполняется код.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

В каком потоке исполняется код.

Сообщение TrueTrue » 06.10.2013 (Вс) 15:37

Есть сервер, к которому подключаются клиенты и загружают данные, данные могут грузится от 1 - до 3 минут. Если подключён 1 клиент, то всё хорошо работает,
если в этот промежуток времени подключается ещё клиент или более, происходит какой-то непонятный сбой. Кто-то из клиентов, не получает необходимые данные.
Я предполагаю, что проблема в Потоках. Хотел логировать, что бы отследить.

Вот и хочу спросить, есть ли возможность узнать, в каком конкретно потоке исполняется конкретная строка. Тоесть к примеру написать Debug.print (Поток №1, Клиент №1) и отследить.

И ещё, я с vb6 перешёл, там с потоками сами знаете как. :) На WinSock сделал не один сервер.
Подскажите пожалуйста, весь код, включая вызовы процедур и функций, из функции в фукнцию, которые идут за строками типа:
Код: Выделить всё
Dim client_Thread As Threading.Thread = New Threading.Thread(AddressOf doListen)
      client_Thread.Start()


Обязательно исполняются в отдельном потоке? И Где заканчивается исполнение строк в данном потоке?

Может быть существует команда или оператор, который позволяет допустим указать конкретный код и выполнить его в конкретном потоке?
Вобщем, за любое подробное разъяснение буду очень благодарен, потому как не могу понять причину сбоя сервера. :(

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: В каком потоке исполняется код.

Сообщение FireFenix » 06.10.2013 (Вс) 20:28

TrueTrue писал(а):Обязательно исполняются в отдельном потоке? И Где заканчивается исполнение строк в данном потоке?

New Threading.Thread В процессе будет создан поток, и выделены под него ресурсы. После запуска потока client_Thread.Start() будет передано управление в AddressOf doListen => только то, что внутри doListen будет выполнено в созданном потоке

TrueTrue писал(а):Вот и хочу спросить, есть ли возможность узнать, в каком конкретно потоке исполняется конкретная строка. Тоесть к примеру написать Debug.print (Поток №1, Клиент №1) и отследить.

Можно конечно обмазаться WinAPI через GetCurrentThreadId() и можно через получить текущий поток + получить его Id

Всю информацию о классе потока можно найти тут -> http://msdn.microsoft.com/ru-ru/library ... hread.aspx

Так же советую почитать http://www.rsdn.ru/article/dotnet/CSThreading1.xml + http://www.rsdn.ru/article/dotnet/CSThreading2.xml
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.10.2013 (Вс) 22:30

TrueTrue писал(а):Подскажите пожалуйста, весь код, включая вызовы процедур и функций, из функции в фукнцию, которые идут за строками типа ... Обязательно исполняются в отдельном потоке?

Наоборот, обязательно в том же, не дожидаясь завершения doListen, который выполняется в параллельном.

TrueTrue писал(а):Вот и хочу спросить, есть ли возможность узнать, в каком конкретно потоке исполняется конкретная строка.

Thread.CurrentTread.
FireFenix, зачем тут WinApi? Кстати, в будущем есть возможность что .NET'овский поток не будет соответствовать Windows'овскому.

TrueTrue писал(а):Может быть существует команда или оператор, который позволяет допустим указать конкретный код и выполнить его в конкретном потоке?

Есть команда присоединения к потоку Join.
Если используется новый .NET, то можно использовать вместо Tread'ов Task'и. Там вроде менеджер позволяет их хитро раскидывать и задавать зависимости. Но сам не пользовался.

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: В каком потоке исполняется код.

Сообщение TrueTrue » 10.10.2013 (Чт) 1:09

Спасибо за подробную инфу, буду разбираться :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList