Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Потоки
Начать новую тему   Ответить на тему   вывод темы на печать

Потоки

Автор
Сообщение
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2010.10.13 23:34.45
Ответить с цитатой
Уважаемые только начал изучать потоки ,
хочу задать пару вопросов - правильно ли я понимаю.
1) поток - это код(последовательность команд) в пути от файла породившего его до процесса в памяти. Так?
2) Многопоточность - это параллельное выполнение кода для которого специально разграничены участки которые будут выполняться в потоке ?
Например:
...

begin
Write('Привет');
Write('Пока');
end.

Как я понимаю данное приложение породит один поток.

Например2:
...

begin
<Поток1>
Write('Привет');
</Поток1>
<Поток2>
Write('Пока');
</Поток2>
end.

А этот пример должен породить два параллельных потока !? Так?? <ПотокN> использовано для наглядности схемы.


Подскажите если что не так
_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2010.10.14 13:36.37
Ответить с цитатой
Процесс - запущенное приложение.
Поток - исполняющийся код. Когда запускается приложение, т.е. создается процесс, то одновременно создается главный поток.
По желанию также можно создавать произвольное количество потоков. Получается такое дерево. Обычные задачи всегда однопоточны.
А то, что вы нарисовали, я не понял.
_________________
http://asm.shadrinsk.net
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Slin
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 17.12.2004
Сообщения: 1869


Статус: Offline
СообщениеДобавлено: 2010.10.14 13:47.52
Ответить с цитатой
псевдокод?
Посмотреть профиль Отправить личное сообщение ICQ Number
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2010.10.14 13:55.42
Ответить с цитатой
F1 -> Thread - класс
....

Процесс может создавать один или более потоков для выполнения частей программного кода, связанного с процессом. Следует использовать делегат ThreadStart или ParameterizedThreadStart для задания программного кода, управляемого потоком. С помощью делегата ParameterizedThreadStart можно передавать данные в потоковую процедуру.

В течение своего существования поток всегда находится в одном или более состояниях, определенных в классе ThreadState. Для потока можно запрашивать планирование уровня приоритета, который определяется классом ThreadPriority, но не гарантируется, что операционная система предоставит его.

Метод GetHashCode предоставляет идентификацию управляемых потоков. В течение жизни поток не будет конфликтовать со значениями, полученными от других потоков, независимо от домена приложения, из которой получается значение.

Примечание.
Идентификационный номер потока (ThreadId) операционной системы не имеет жесткой взаимосвязи с управляемым потоком, так как неуправляемый хост может контролировать взаимосвязь между управляемыми и неуправляемыми потоками. В частности, сложный хост может использовать CLR Hosting API для планирования нескольких управляемых потоков на один поток операционной системы или перемещения управляемых потоков между различными потоками операционной системы.


Нет нужды в сохранении ссылки на объект Thread после запуска потока. Поток продолжает выполняться до завершения потоковой процедуры.

Примеры
В следующем примере кода показаны простейшие функциональные возможности работы с потоками.

Язык Visual Basic Копировать код
Imports System
Imports System.Threading

' Simple threading scenario:  Start a Shared method running
' on a second thread.
Public Class ThreadExample
    ' The ThreadProc method is called when the thread starts.
    ' It loops ten times, writing to the console and yielding 
    ' the rest of its time slice each time, and then ends.
    Public Shared Sub ThreadProc()
        Dim i As Integer
        For i = 0 To 9
            Console.WriteLine("ThreadProc: {0}", i)
            ' Yield the rest of the time slice.
            Thread.Sleep(0)
        Next
    End Sub

    Public Shared Sub Main()
        Console.WriteLine("Main thread: Start a second thread.")
        ' The constructor for the Thread class requires a ThreadStart 
        ' delegate.  The Visual Basic AddressOf operator creates this
        ' delegate for you.
        Dim t As New Thread(AddressOf ThreadProc)

        ' Start ThreadProc.  Note that on a uniprocessor, the new 
        ' thread does not get any processor time until the main thread 
        ' is preempted or yields.  Uncomment the Thread.Sleep that 
        ' follows t.Start() to see the difference.
        t.Start()
        'Thread.Sleep(0)

        Dim i As Integer
        For i = 1 To 4
            Console.WriteLine("Main thread: Do some work.")
            Thread.Sleep(0)
        Next

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.")
        t.Join()
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.")
        Console.ReadLine()
    End Sub
End Class




Язык C# Копировать код
using System;
using System.Threading;

// Simple threading scenario:  Start a static method running
// on a second thread.
public class ThreadExample {
    // The ThreadProc method is called when the thread starts.
    // It loops ten times, writing to the console and yielding 
    // the rest of its time slice each time, and then ends.
    public static void ThreadProc() {
        for (int i = 0; i < 10; i++) {
            Console.WriteLine("ThreadProc: {0}", i);
            // Yield the rest of the time slice.
            Thread.Sleep(0);
        }
    }

    public static void Main() {
        Console.WriteLine("Main thread: Start a second thread.");
        // The constructor for the Thread class requires a ThreadStart 
        // delegate that represents the method to be executed on the 
        // thread.  C# simplifies the creation of this delegate.
        Thread t = new Thread(new ThreadStart(ThreadProc));

        // Start ThreadProc.  Note that on a uniprocessor, the new 
        // thread does not get any processor time until the main thread 
        // is preempted or yields.  Uncomment the Thread.Sleep that 
        // follows t.Start() to see the difference.
        t.Start();
        //Thread.Sleep(0);

        for (int i = 0; i < 4; i++) {
            Console.WriteLine("Main thread: Do some work.");
            Thread.Sleep(0);
        }

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
        t.Join();
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
        Console.ReadLine();
    }
}



Этот код формирует выходные данные, подобные приведенным ниже:

Копировать код
[VB, C++, C#]
 Main thread: Start a second thread.
 Main thread: Do some work.
 ThreadProc: 0
 Main thread: Do some work.
 ThreadProc: 1
 Main thread: Do some work.
 ThreadProc: 2
 Main thread: Do some work.
 ThreadProc: 3
 Main thread: Call Join(), to wait until ThreadProc ends.
 ThreadProc: 4
 ThreadProc: 5
 ThreadProc: 6
 ThreadProc: 7
 ThreadProc: 8
 ThreadProc: 9
 Main thread: ThreadProc.Join has returned.  Press Enter to end program.

_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2010.10.14 14:30.44
Ответить с цитатой
А на Delphi можно пример?

_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2010.10.14 15:23.45
Ответить с цитатой
смотря с чем ты на дельфи работаешь, там и ищи примеры. или vcl, или winapi, или .net. у борланда неплохой хелп, и примеры были всегда и в хелпе и на диске.
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Vladislav_133
Old Programmer


Пол: Пол:Муж.
Зарегистрирован: 27.09.2006
Сообщения: 4502


Статус: Offline
СообщениеДобавлено: 2010.10.14 15:37.42
Ответить с цитатой
Ну, вот Andy Ice все расписал. Только разобраться надо. Если соберусь, то еще на API напишу. Тут главное суть понять, а на чем писать - не важно.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2010.10.14 15:41.30
Ответить с цитатой
это не я расписал, а MSDN
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2010.10.14 23:50.15
Ответить с цитатой
Почему в делфи в одной литературе пишут поток - TStream в другой TThread это разные вещи?
_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2010.10.15 07:41.19
Ответить с цитатой
это разные компоненты. Stream - поток данных (файл или т.п.), Thread - поток выполнения
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Потоки

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы