link2698 link2699 link2700 link2701 link2702 link2703 link2704 link2705 link2706 link2707 link2708 link2709 link2710 link2711 link2712 link2713 link2714 link2715 link2716 link2717 link2718 link2719 link2720 link2721 link2722 link2723 link2724 link2725 link2726 link2727 link2728 link2729 link2730 link2731 link2732 link2733 link2734 link2735 link2736 link2737 link2738 link2739 link2740 link2741 link2742 link2743 link2744 link2745 link2746 link2747 link2748 link2749 link2750 link2751 link2752 link2753 link2754 link2755 link2756 link2757 link2758 link2759 link2760 link2761 link2762 link2763 link2764 link2765 link2766 link2767 link2768 link2769 link2770 link2771 link2772 link2773 link2774 link2775 link2776 link2777 link2778 link2779 link2780 link2781 link2782 link2783 link2784 link2785 link2786 link2787 link2788 link2789 link2790 link2791 link2792 link2793 link2794 link2795 link2796 link2797 link2798 link2799 link2800 link2801 link2802 link2803 link2804 link2805 link2806 link2807 link2808 link2809 link2810 link2811 link2812 link2813 link2814 link2815 link2816 link2817 link2818 link2819 link2820 link2821 link2822 link2823 link2824 link2825 link2826 link2827 link2828 link2829 link2830 link2831 link2832 link2833 link2834 link2835 link2836 link2837 link2838 link2839

Форум — Ответы     (  К темам )
 ?  Вася: Отдельный поток (24-11-2002 14:26:54)
Мне посоветывали выполнить часть кода, в отдельном потоке, посмотрел на примеры, почитал help, не получилось, напишите, как это сделать, по нажатию кнопки, чтобы было не сложно, но работало, спасибо!
 Alexey (25-11-2002 10:18:08)
Посмотри пример Threads — там хорошо написаный пример.
Если что там неясно — спрашивай конкретно
 Владимир (25-11-2002 18:26:49)
Да, работа с потоками... А лучше без них... Спокойней...
Итак, в рамках форума все не расскажешь, да все никто и не знает
как оно там живет...

Где-то через неделю смотрите статью по работе с потоками в разделе "Начинающим"


Кратко — конкретно для C++Builder:
TThread — абстрактный класс, который допускает созданию отдельных потоков выполняющихся в приложении, поэтому -
вы должны создать новый объект класса, производного от TThread
Для создания и использования нового объекта потока:

Выберите File | New | Other | Thread Object , чтобы создать новый модуль, содержащий объект, производный от класса TThread,
вам предложат как-то обозвать этот класс, обзовите как вам нравится,
например TMyThread
определите новый конструктор потокового объекта.
определите метод объекта Execute, вставляя код, который должен выполниться,когда поток выполняется.

В основной программе создайте объект этого потокового класса

// создаем поток в приостановленном состоянии (true), запущенном(false)
TMyThread *Thr = new TMyThread(true);

запустите этот поток Thr->Resume();
остановите этот поток Thr->Suspend();
завершить извне поток Thr->Terminate();
и т.д.
После чего засовываете свои сложные вычисления в Execute() (т.е. в отдельный поток)

Далее, если вы хотите из потока обращаться к объектам VCL:

Когда Вы используете объекты из иерархий VCL или CLX, их свойства и методы, не гарантируется безопасность потока. То есть обращаясь к свойствам или выполняя методы этих объектов, могут выполнятся некоторые действия, которые используют память, которая не защищена от действий других потоков.

Для этого необходимо использовать метод Synchronize

void __fastcall TMyThread::Execute()
{
for(int i=0; i<10000; i++)
{
// -- какие-то сложные вычисления в цикле
// ---
Synchronize(pb);
}
}
//---------------------------------------------------------------------------

void __fastcall TMyThread::pb()
{
static int n = 0;
n++;
Form1->Label1->Caption = n;
}
//---------------------------------------------------------------------------

Смотрите короткий пример 5 Kb здесь, через неделю — в разделе "Начинающим" статью о работе с потоками.
 Владимир (26-11-2002 21:18:04)
Да, статья и пример готовы,
смотрите здесь

чего непонятно, спрашивайте...