Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.08.2011, 18:42
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию inttostr в потоке

Сел учить потоки и в самом начале возникла проблема. Вот пример с книжки:
Форма:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  co:=TCountObj.Create(true);
  co.Resume;
  co.Priority:=tpLower;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  co.Terminate;
end;
Поток:
Код:
procedure TCountObj.Execute;
begin
  FreeOnTerminate:=true;
  index:=1;
  while index>0 do
  begin
    Synchronize(UpdateLabel);
    Inc(index);
    if index>100000 then
      index:=0;

    if terminated then
      exit;
  end;
end;

procedure TCountObj.UpdateLabel;
begin
  Form1.Label1.Caption:=inttostr(index);
end;

Проблема в том что в потоке не работает inttostr. Пишет Undecleared identifier 'inttostr'. Использую Delphi 2010. С чем это может быть связано?
Ответить с цитированием
  #2  
Старый 09.08.2011, 19:13
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

SysUtils добавь в блок uses
Ответить с цитированием
  #3  
Старый 09.08.2011, 19:51
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

или:

Код:
procedure CvtInt;
{ IN:
    EAX:  The integer value to be converted to text
    ESI:  Ptr to the right-hand side of the output buffer:  LEA ESI, StrBuf[16]
    ECX:  Base for conversion: 0 for signed decimal, 10 or 16 for unsigned
    EDX:  Precision: zero padded minimum field width
  OUT:
    ESI:  Ptr to start of converted text (not start of buffer)
    ECX:  Length of converted text
}
asm
        OR      CL,CL
        JNZ     @CvtLoop
@C1:    OR      EAX,EAX
        JNS     @C2
        NEG     EAX
        CALL    @C2
        MOV     AL,'-'
        INC     ECX
        DEC     ESI
        MOV     [ESI],AL
        RET
@C2:    MOV     ECX,10

@CvtLoop:
        PUSH    EDX
        PUSH    ESI
@D1:    XOR     EDX,EDX
        DIV     ECX
        DEC     ESI
        ADD     DL,'0'
        CMP     DL,'0'+10
        JB      @D2
        ADD     DL,('A'-'0')-10
@D2:    MOV     [ESI],DL
        OR      EAX,EAX
        JNE     @D1
        POP     ECX
        POP     EDX
        SUB     ECX,ESI
        SUB     EDX,ECX
        JBE     @D5
        ADD     ECX,EDX
        MOV     AL,'0'
        SUB     ESI,EDX
        JMP     @z
@zloop: MOV     [ESI+EDX],AL
@z:     DEC     EDX
        JNZ     @zloop
        MOV     [ESI],AL
@D5:
end;

function IntToStr(Value: Integer): string;
//  FmtStr(Result, '%d', [Value]);
asm
        PUSH    ESI
        MOV     ESI, ESP
        SUB     ESP, 16
        XOR     ECX, ECX       // base: 0 for signed decimal
        PUSH    EDX            // result ptr
        XOR     EDX, EDX       // zero filled field width: 0 for no leading zeros
        CALL    CvtInt
        MOV     EDX, ESI
        POP     EAX            // result ptr
        CALL    System.@LStrFromPCharLen
        ADD     ESP, 16
        POP     ESI
end;

__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 09.08.2011, 20:39
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от NumLock
или:

Код:
procedure CvtInt;
{ IN:
    EAX:  The integer value to be converted to text
    ESI:  Ptr to the right-hand side of the output buffer:  LEA ESI, StrBuf[16]
    ECX:  Base for conversion: 0 for signed decimal, 10 or 16 for unsigned
...................................


...........................................
Ответить с цитированием
  #5  
Старый 09.08.2011, 21:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
или:

Код:
procedure CvtInt;

function IntToStr(Value: Integer): string;

Я горько плакаль. , Паскалевский способ уже не подходит?
Код:
function IntToStr(I : Integer) : String;
var
  St : String[31];
begin
  Str(I, St);
  Result := String(St);
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 09.08.2011 в 22:02.
Ответить с цитированием
  #6  
Старый 09.08.2011, 22:45
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Премного благодарен за ответы. Изначально я догадывался что нужно что то в uses дописать но лучше спросить у профессионалов.
Еще такой вопрос. У меня программа в потоке посылает на сервер всякие запросы типа get, post, а в ответ я получаю данные которые в дальнейшем обрабатываются и выводятся в memo, как мне сделать так что бы memo не зависал при работе? Нужно все что должно отправиться на экран, то есть в memo выводить используя Synchronize?
Ответить с цитированием
  #7  
Старый 09.08.2011, 23:39
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Ааа....все) с этим разобрался. Теперь другая проблема, как сделать много потоков. У меня есть идея которую я не знаю как реализовать. В общем есть файл, там к примеру 15000 аккаунтов, для корректной роботы и с учетом времени нужно что бы все аккаунты за пол часа были использованы, но в один поток за пол часа проходит только 500 аккаунтов и теперь задумка. Нужно количество аккаунтов в файле делить на 500 и создавать столько потоков сколько выйдет в результате деления, в конкретном случае 30. Помогите это организовать, я совсем не понимаю как так сделать. Нужно ли в ручную создавать столько потоков, а потом просто вызывать их в нужном количестве или может можно создать один но что бы он запустился n-ное количество раз?
Ответить с цитированием
  #8  
Старый 10.08.2011, 00:03
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Это уже "попахивает" спамерством, а это другая тема и здесь я не помощник.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 10.08.2011, 00:40
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Спам здесь не причем я таким не занимаюсь и аккаунтов не 15000 само собой.
Просто нужно периодически заходить на сайт вот и все.
Может все таки поможешь? Ну или хотя бы идейку, а я потом сам посижу подумаю если не веришь мне.
Ответить с цитированием
  #10  
Старый 10.08.2011, 00:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

500 это, конечно, перебор, десятка должно хватить. А вот как создавать, это уже дело программиста.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 10.08.2011, 01:06
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Так как правильней будет?
Писать руками код для всех потоков, а потом просто вызывать сколько нужно будет?
Ответить с цитированием
  #12  
Старый 10.08.2011, 01:16
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Но ведь "поток" в Дельфи это класс, ну и создавай сколько нужно экземпляров. А ещё лучше, создай "наследника", и пропиши в нём нужные действия.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025