Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает CreateThread 
V
    Опции темы
ama_kid
Дата 4.7.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата(uranpro @  4.7.2008,  11:17 Найти цитируемый пост)
попробовал
пробуй до тех пор пока не заработает  smile 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
uranpro
Дата 4.7.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



)) куль! еще вопросик

Код

procedure MyProc(var res:boolean);
var i:Integer;
begin
try
for i:=1 to 100 do begin
 if i=20 then Form1.Memo1.Lines.Add('20a');
 Sleep(30);
 if i=40 then Form1.Memo1.Lines.Add('40a');
 if i=80 then StrToInt(Form1.Memo1.Text); //делаем ошибку ^^,
 end;
 res:=true;
except
 res:=false;
 end;
end;

var res:boolean;
BeginThread(nil,0,@MyProc(res) ,nil,0,PLongWord(nil)^);

почему он ругается? когда не задаю параметр вобще- работает, когда удаляю из самой процедуры параметр - работает.

msg: varible required

Добавлено через 3 минуты и 5 секунд
и еще когда из процедуры пытаюсь показать сообщение(showmessage) - он выдает какую-то странную форму, она случайного размера, ширина и высота может быть >10000     o_0

Добавлено через 5 минут и 24 секунды
ama_kid, я знаю как проверить. просто на except у меня было showmessage а оно не неральной формы, я сначала и не понял, что это showmessage))


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
ama_kid
Дата 4.7.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Во-первых, потоковая функция имеет тип:
Код
type TThreadFunc = function(Parameter: Pointer): Integer;
Поэтому делай такой же.
Во вторых (и это главное) - так делать нельзя:
Код
...,@MyProc(res)...
Третий параметр - это просто указатель на функцию, а параметр самой функции передается четвертым параметром BeginThread. В общем, читаем тут


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
uranpro
Дата 4.7.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



и еще один))
почему я не могу запустить свою процедуру, которая является методом класса ?

Код

TFormReportPRO = class(TForm)
     ///
   {TEXT}
   ///
private
    { Private declarations }
     ///
   procedure Gen;
   ///
  public
    { Public declarations }
  end;

procedure FormReportPRO.butclick
begin
BeginThread(nil,0,@Gen ,nil,0,PLongWord(nil)^);                           //не работает
BeginThread(nil,0,@FormReportPRO.Gen ,nil,0,PLongWord(nil)^); //не работает
end;



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Rennigth
Дата 4.7.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



потому что это 
Цитата

метод класса

 smile 
он имеет первым параметром ссылку на объект, плюс передача парамеров происходит с соглашением register.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
bems
Дата 5.7.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(uranpro @  4.7.2008,  12:58 Найти цитируемый пост)
почему я не могу запустить свою процедуру, которая является методом класса ?

ну тебе ж ужу сказали:
Цитата(ama_kid @  3.7.2008,  14:39 Найти цитируемый пост)
"если нельзя, но очень хочется - то можно" 
 вот так:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    s:string;
    procedure ThreadMethod;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var mtd:procedure of object;
begin
s:='WOW!';
mtd:=ThreadMethod;
BeginThread(nil,0,TMethod(mtd).Code,TMethod(mtd).Data,0,PLongWord(nil)^);
end;

procedure TForm1.ThreadMethod;
begin
AllocConsole;
Writeln(s);
end;

end.




--------------------
Обижено школьников: 8
PM MAIL   Вверх
uranpro
Дата 5.7.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



bems, интересно! большое спасибо.
а я решил так
Код

procedure tform1.mproc;
begin
///
end;

procedure linkmprok
begin
mproc;
end;

procedure tform1.buttonclick
begin
linkmproc;
end;


))) правлю на твой код!


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0762 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.