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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2014, 15:08   #1
fox_and_Delphi
Новичок
Джуниор
 
Регистрация: 22.10.2014
Сообщений: 5
По умолчанию Таймер на api

Всем здравствуйте.
У меня проблема как запустить таймер в отдельном потоке на api? Таймер создаю следующим способом:
Код:
procedure ProcTime;
begin
  //Сдесь код который надо выполнять
end;

{это процедура выполняется при нажатии button}
begin
  SetTimer(hWND,1,1000*120,@ProcTime);
end;

//Уничтожить таймер
KillTimer(hWND,1);
Дело в том что не могу разобраться с CreateThread\BeginThread как если не запустить в отдельном потоке форма просто виснет и все и потом программа закрывается не коректно(принудительно). Кто сможет подсказать?
fox_and_Delphi вне форума Ответить с цитированием
Старый 22.10.2014, 15:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А вот интересно зачем таймер нужен, если задержку можно отсчитать в том же потоке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 17:48   #3
fox_and_Delphi
Новичок
Джуниор
 
Регистрация: 22.10.2014
Сообщений: 5
По умолчанию

нет нужно в таймере, просто проблема создания потока, как правильно и коректно сделать чтобы работало параллельно с программой мой созданый поток.
fox_and_Delphi вне форума Ответить с цитированием
Старый 22.10.2014, 19:19   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Давно не работал с Win API в этом плане, так что не суди строго за быдлокод:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses  windows,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public

    { public declarations }
  end;

var tid: TThreadID;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure tp(hWnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
  stdcall;
begin
  form1.ListBox1.Items.Append('11');
end;

function tt(parameter: pointer): ptrint;
begin
 SetTimer(Form1.Handle,1,100,@tp);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 BeginThread(nil,0,@tt,nil,0,tid);
end;


end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 22:28   #5
fox_and_Delphi
Новичок
Джуниор
 
Регистрация: 22.10.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Давно не работал с Win API в этом плане, так что не суди строго за быдлокод:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses  windows,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public

    { public declarations }
  end;

var tid: TThreadID;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure tp(hWnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
  stdcall;
begin
  form1.ListBox1.Items.Append('11');
end;

function tt(parameter: pointer): ptrint;
begin
 SetTimer(Form1.Handle,1,100,@tp);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 BeginThread(nil,0,@tt,nil,0,tid);
end;


end.
Stilet , благодарю за код но это ясно, у меня проблемы именно с создание и вообще с патоком в api, я просто не нашел на форуме раздел про api а поиск по форуму не дал ни чего.
fox_and_Delphi вне форума Ответить с цитированием
Старый 22.10.2014, 22:44   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так какие проблемы то?
Пример не помог прояснить ситуацию?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 22:56   #7
fox_and_Delphi
Новичок
Джуниор
 
Регистрация: 22.10.2014
Сообщений: 5
По умолчанию

мне надо помочь разобраться с CreateThread\BeginThread , не могу правильно как воткнуть таймер в CreateThread\BeginThread таймер.
fox_and_Delphi вне форума Ответить с цитированием
Старый 23.10.2014, 02:31   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от fox_and_Delphi Посмотреть сообщение
мне надо помочь разобраться с CreateThread\BeginThread , не могу правильно как воткнуть таймер в CreateThread\BeginThread таймер.
Так чем помочь? Что за проблемы?

P.S. Таймер не втыкают. Втыкают нечто иное.
P.P.S. А вот с Thread'ом API-шным вам явно нужно разбираться читая МСДН и справку. Раз уж вы упоминаете и CreateThread и BeginThread.
northener вне форума Ответить с цитированием
Старый 23.10.2014, 07:28   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а... Я так понимаю пример мой не читал. Ладно, пока больше предложить нечего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2014, 08:08   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

создайте нормальный поток? зачем именно апишный.
и в потоке отсчет времени проще организовать или через sleep или через WaitableTimer или через синхронизацию с основным потоком на котором таймер(еще конечно можно и свой цикл сообщений поднять )
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер ЕгорКр Общие вопросы Delphi 6 05.06.2013 22:33
Таймер Руслан(2) Общие вопросы C/C++ 0 05.06.2012 16:54
Таймер Prizrak86 C# (си шарп) 3 31.01.2012 18:43
таймер ZET78 Общие вопросы C/C++ 2 24.05.2010 12:56
API-таймер Кронос Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 28.07.2009 12:06