Расчет
При расчете моя программа перегружает проц настолько, что все нафиг отрубается. Как понизить приоритет, ил еще как-нибудь, чтобы программа успевала отображать данные в StringList?
Во-вторых вы можете использовать объект "поток", дать ему низкий приоритет, ну сделать в нем свой расчет. Только с потоком надо аккуратно работать. У меня, например, поток с устройством работает, а вызывается по таймеру. Там есть заковырки с синхронизацией - дело в том, что мне постоянно надо опрашивать устройство. Если у Вас проще задача, то и с потоком проще
Если нужен небольшой пример - могу написать.
Цитата:
On 2002-08-22 1636, Dmitri wrote
При расчете моя программа перегружает проц настолько, что все нафиг отрубается. Как понизить приоритет, ил еще как-нибудь, чтобы программа успевала отображать данные в StringList?
Дело не в том, что процессор перегружается... просто твои вычисления идут в одном треде (нити, потоке) с рисоватием, и пока они не закончатся программа рисовать ничего не начнёт. Предыдущий оратор правильно написал - делай вычисления в отдельном потоке. В CB есть пример про сортировку массивов тремя способами одновременно.
Поконкретнее можно? Пример приведи, как создать новый поток, а то в BCB такие примеры...
Насколько я понимаю вычисления утебя идут в цикле. Если это так то нужно вставить в цикл, в котором происходят вычисления, вызов Application->ProcessMessages(); Т.е.:
for(.....
{
// здесь выполняются вычисления
Application->ProcessMessages();
}
Если получится то плиз напиши об этом...
нормальные по моему примеры... самое простое - создаь поток через визард как отдельный модуль... File->New->Other... а там выбираешь Thread Object. Если надо - вышлю пример...
//MaxTread.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MaxTread.h"
#pragma package(smart_init)
extern TThread *Thread;
//---------------------------------------------------------------------------
__fastcall TMaxThread::TMaxThread(void)
: TThread(False)
{
FreeOnTerminate = True;
Synchronize(DoVisualProgressForm);
}
//---------------------------------------------------------------------------
void __fastcall TMaxThread::DoVisualProgress(void)
{
//Здесь сама визуализация...
}
//---------------------------------------------------------------------------
void __fastcall TMaxThread::DoVisualProgressForm(void)
{
//Тут я показывал окно в котором происходит визуализация
}
//---------------------------------------------------------------------
void __fastcall TMaxThread::VisualProgress(void)
{
Synchronize(DoVisualProgress);
}
//---------------------------------------------------------------------
void __fastcall Execute(void)
{
//Тут вычисления идут...
}
//А это уже пошёл MaxTread.h
//---------------------------------------------------------------------------
#ifndef MaxTreadH
#define MaxTreadH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class TMaxThread : public TThread
{
private:
protected:
void __fastcall Execute(void);
void __fastcall DoVisualProgress(void);
void __fastcall DoVisualProgressForm(void);
void __fastcall VisualProgress(void);
public:
__fastcall TMaxThread(void);
};
//---------------------------------------------------------------------------
#endif