Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > проблемма с потоком


Автор: desivers 24.3.2007, 23:03
вот решил организовать потоки, открыл архангельского делаю все по инструкции выскакивает ошибка вот на этой строке Synchronize(NewCaption);
[C++ Error] Unit2.cpp(49): E2285 Could not find a match for 'TThread::Synchronize(void)'

Код

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
#pragma package(smart_init)

__fastcall MyTime::MyTime(bool CreateSuspended)
    : TThread(CreateSuspended)
{
    TMax = EncodeTime(0, 0, 10, 0);
}
//---------------------------------------------------------------------------

void __fastcall MyTime::NewCaption()
{
    Form1->Label1->Caption = TimeToStr(TMax - (Now() - T0));
}
void __fastcall MyTime::Result()
{
    if (Terminated)
        ShowMessage("ДА");
    else
        ShowMessage("НЕТ");
}

void __fastcall MyTime::Execute()
{
    T0 = Now();
    do {
        Synchronize(NewCaption);
    }
    while (!Terminated && ((double) (TMax - (Now()-T0)) >= 0));
        if (Terminated)
    {
        ShowMessage("ДА");
    }
    else
        ShowMessage("НЕТ");
}
//-------------------------------------------------------------------


как использовать синхронизацию?

Автор: ama_kid 25.3.2007, 12:59
По идее - все нормально, по крайней мере в показанном коде...
Вот пример их хелпа:
Код

void __fastcall TMyThread::PushTheButton(void)

{
  Button1->Click();
}

void __fastcall TMyThread::Execute()
{
  ...
  Synchronize(PushTheButton);
  ...
}

Отличия с твоим кодом я вижу только в объявлении синхронизируемой процедуры:
void __fastcall TMyThread::PushTheButton(void)

Автор: desivers 25.3.2007, 18:11
все нашел ошибку надо было передать адрес функции так

Код

Synchronize(&Time);


хотя в книжки написано 

Код

Synchronize(Time);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)