Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2013, 15:07   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Работа с потоками.

В потоке ругается на PosEx
Aleksandr вне форума Ответить с цитированием
Старый 12.03.2013, 15:25   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
Радость

Я рад за тебя. А тему зачем создал?
Kix.IV вне форума Ответить с цитированием
Старый 12.03.2013, 15:32   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

С этой ошибкой разобрался сейчас другая. При считывании данных с com порта в потоке выводит ошибку
Вот мой код. Бросил полностью Unit потока
Код:
unit MyThread;

interface

uses
  Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF},Messages,Dialogs,SysUtils,ShellAPI,
  Variants,  Graphics, Controls, StdCtrls,StrUtils,Math;

type
  TCountObj = class(TThread)
  private
    procedure SetName;
  protected
    procedure Execute; override;
  end;

implementation

uses Main, Option;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TCountObj.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{$IFDEF MSWINDOWS}
type
  TThreadNameInfo = record
    FType: LongWord;     // must be 0x1000
    FName: PChar;        // pointer to name (in user address space)
    FThreadID: LongWord; // thread ID (-1 indicates caller thread)
    FFlags: LongWord;    // reserved for future use, must be zero
  end;
{$ENDIF}

{ TCountObj }

procedure TCountObj.SetName;
{$IFDEF MSWINDOWS}


var
  ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
  ThreadNameInfo.FType := $1000;
  ThreadNameInfo.FName := 'co1';
  ThreadNameInfo.FThreadID := $FFFFFFFF;
  ThreadNameInfo.FFlags := 0;

  try
    RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
  except
  end;
{$ENDIF}
end;
//function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
function only_numbers(str:string):string;

var buf:string;
    i:integer;
begin
buf:='';
for i:=1 to length(str) do
  if str[i] in ['0'..'9', '.', ','] then buf:=buf+str[i];

Result:=buf;
end;

procedure TCountObj.Execute;
var
  S, S1: String;

  f:real;
  s3:real;
  a,b:integer;
  i1,i2: Integer;
    r: Real;
  Count: Integer;
begin
//  SetName;
  { Place thread code here }
//showmessage('Digite um HostName ou um End. IP');
 mainform.BComPort1.ReadStr(S, Count);
  if mainform.cbCRLF.Checked and (S[Length(S)] = #13) then // Äîáàâëåíèå ïåðåâîäà ñòðîêè
    S := S + #10;
    mainform.Memo1.Text := mainform.Memo1.Text + S;
  //if s<>'' then
//  begin

  s1:=only_numbers(s);
   s1:=StringReplace(s1, '.',',' , [rfReplaceAll]);
  // s1:=StringReplace(s1, ' ','' , [rfReplaceAll]);
    //   Memo1.Text := Memo1.Text + S;
 i1:=Pos(',',s1);
  if i1>0 then begin
    i2:=PosEx(',',s1,i1+1);
    if i2>0 then s1:=Copy(s1,1,i2-1)+Copy(s1,i2+1,Length(s1)-i2);
  end;
  r:=RoundTo(StrToFloatDef(s1,0),-2);  //ðåçóëüòàò
  mainform.Edit2.Text:=Floattostr(r);
   // edit2.Text:=s1;
//  if s1<>'' then
 // begin
{i1:=Pos(',',s1);
  if i1>0 then begin
    i2:=PosEx(',',s1,i1+1);
    if i2>0 then s1:=Copy(s1,1,i2-1)+Copy(s1,i2+1,Length(s1)-i2);
  end;
  r:=RoundTo(StrToFloatDef(s1,0),-2);  //ðåçóëüòàò
  Edit2.Text:=Floattostr(r); }

 // f:=strtofloat(s1) ;
//   f:=strtofloat(Edit2.Text) ;
//  if f<>0 then
 // begin
  mainform.edtNotes.Text:=mainform.edtNotes.Text+mainform.Edit2.Text +#9#9+TimeToStr(now) +#13+#10;
  if strtofloat(mainform.Edit2.Text)>0 then
begin
  mainform.ADOTable1.Insert;
//MainForm.ADOTable1.Edit;

MainForm.ADOTable1.FieldByName('Ìàññà').Value:=mainform.Edit2.Text;
MainForm.ADOTable1.FieldByName('Com').Value:=mainform.dbcombobox1.Text;
MainForm.ADOTable1.FieldByName('Organization').Value:=mainform.dbcombobox3.Text;
MainForm.ADOTable1.FieldByName('Äàòà_çàïèñè').AsString:=DateToStr(now);
MainForm.ADOTable1.FieldByName('Âðåìÿ_çàïèñè').AsString:=TimeToStr(now);

 MainForm.ADOTable1.Post;
//MainForm.ADOTable1.Refresh;

 // end;
  end;
 if Optionform.RzEdit1.Text<>'' then
 begin
 a:=mainform.memo1.Lines.Count;
  if a>Strtoint(Optionform.RzEdit1.Text) then
  mainform.memo1.Clear;
 end;

 if Optionform.RzEdit2.Text<>'' then
 begin
 b:=mainform.edtNotes.Lines.Count;
  if b>Strtoint(Optionform.RzEdit2.Text) then
 mainform.edtNotes.Clear;
 end;



  if terminated then

   exit;
end;

end.
Изображения
Тип файла: jpg ошибка.jpg (33.8 Кб, 75 просмотров)
Aleksandr вне форума Ответить с цитированием
Старый 12.03.2013, 15:40   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Текст после uses Main, Option; вам о чем-то говорит?
Весь код не смотрел, достаточно и mainform.Memo1.Text := mainform.Memo1.Text + S; в Execute
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.03.2013, 15:50   #5
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Аватар, а можно поподробней?
mainform.Memo1.Text := mainform.Memo1.Text + S это я пишу текст в memo1 на форме mainform или я что-то делаю не так? Как тогда реализовать запись данных в компоненты на форме mainForm.
Aleksandr вне форума Ответить с цитированием
Старый 12.03.2013, 15:51   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Подробнее читайте о методе Synchronize
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.03.2013, 16:19   #7
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Аватар спасибо. Сделал.
Aleksandr вне форума Ответить с цитированием
Старый 12.03.2013, 16:21   #8
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
Радость

Вечная проблема. Каждый почему-то считает, что он умный и эти коментарии, при создании нового потока и dll, не нужны.
Kix.IV вне форума Ответить с цитированием
Старый 12.03.2013, 20:44   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Добавь StrUtils в секцию Uses и не будет на PosEx ругаться.
Человек_Борща вне форума Ответить с цитированием
Старый 12.03.2013, 20:56   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Добавь StrUtils в секцию Uses и не будет на PosEx ругаться.
На это ругалось бы при компиляции, а StrUtils у ТС есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками. crazygoldbullet Win Api 7 13.04.2013 18:27
работа с потоками MetR Помощь студентам 1 04.12.2011 01:32
Работа с потоками Яр|/||< (^_^) Общие вопросы Delphi 5 09.03.2010 08:23
Работа с потоками den49 Помощь студентам 0 06.10.2009 14:52
работа с потоками Alex_Pro Общие вопросы .NET 1 01.07.2008 07:25