Страница 1 из 1

Подскажите пожалуйста

Добавлено: 20 июн 2005, 10:43
alex2233
Здравствуйте!

Подскажите пожалуйста, как в Билдере 5 перейти на процесс параллельного выполнения команд.

Например, при отображении на графическом интерфейсе текущего времени (в течение установленных 15 секунд), в процессе работы программы не работают остальные кнопки (функции), в частности, на преждевременное закрытие программы (Button2).

даю Unit1.cpp:

#include<iostream>
#include <vcl.h>
#pragma hdrstop
#include <dos.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{

Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i = 0;

while (i<15)
{
Label1->Caption = Time();
_sleep (1);
Label1->Refresh();
i++;
}
}

Заранее спасибо,
Александр.

Добавлено: 20 июн 2005, 10:49
Eugie
Два способа: 1) в цикле вызывать Application->ProcessMessages(); 2) сам цикл отображения времени выделить в отдельный поток (см.класс TThread), не забывая при этом о синхронизации с главным потоком (см. в справке Using the main VCL/CLX thread)

Добавлено: 20 июн 2005, 12:46
alex2233
Попробовал, как посоветовали по способу 1 (добавил в цикл Application->ProcessMessages(); ) - все равно кнопка Button2 не активизируется пока не пройдет 15 секунд !!!

Добавлено: 20 июн 2005, 16:23
Eugie
Не активизируется или не срабатывает? У тебя на Button2 повешено закрытие формы, оно действительно не произойдет до выхода из цикла. Чтобы все работало как надо, введи флажок FNeedToClose, при в входе Button1Click устанавливай его в false, в обработчике Button2Click устанавливай его в true и проверяй в условии цикла: while (i < 15 && !FNeedToClose).

Добавлено: 21 июн 2005, 13:08
alex2233
Установил FNeedToClose, как посоветовали.
Однако при компиляции получил сообщения:

[C++ Error] Unit1.cpp(30): E2377 While statement missing )
[C++ Warning] Unit1.cpp(39): W8004 'i' is assigned a value that is never used

Может не правильно установил флажок, не подскажите ?

С уважением,
Александр

Добавлено: 21 июн 2005, 16:19
Sera
:) ))

Добавлено: 21 июн 2005, 22:05
Eugie
Моя ошибка, по привычке к Delphi :)
Исправил, alex2233, попробуй еще раз.

Добавлено: 22 июн 2005, 06:51
alex2233
Огромное спасибо, все получилось !!!!!

:)