link3168 link3169 link3170 link3171 link3172 link3173 link3174 link3175 link3176 link3177 link3178 link3179 link3180 link3181 link3182 link3183 link3184 link3185 link3186 link3187 link3188 link3189 link3190 link3191 link3192 link3193 link3194 link3195 link3196 link3197 link3198 link3199 link3200 link3201 link3202 link3203 link3204 link3205 link3206 link3207 link3208 link3209 link3210 link3211 link3212 link3213 link3214 link3215 link3216 link3217 link3218 link3219 link3220 link3221 link3222 link3223 link3224 link3225 link3226 link3227 link3228 link3229 link3230 link3231 link3232 link3233 link3234 link3235 link3236 link3237 link3238 link3239 link3240 link3241 link3242 link3243 link3244 link3245 link3246 link3247 link3248 link3249 link3250 link3251 link3252 link3253 link3254 link3255 link3256 link3257 link3258 link3259 link3260 link3261 link3262 link3263 link3264 link3265 link3266 link3267 link3268 link3269 link3270 link3271 link3272 link3273 link3274 link3275 link3276 link3277 link3278 link3279 link3280 link3281 link3282 link3283 link3284 link3285 link3286 link3287 link3288 link3289 link3290 link3291 link3292 link3293 link3294 link3295 link3296 link3297 link3298 link3299 link3300 link3301 link3302 link3303 link3304 link3305 link3306 link3307 link3308 link3309 link3310 link3311

Форум — Ответы     (  К темам )
 ?  Вася: Отдельный поток (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)
Да, статья и пример готовы,
смотрите здесь

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