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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.11.2009, 22:08
MiRiN MiRiN вне форума
Прохожий
 
Регистрация: 08.11.2009
Сообщения: 3
Репутация: 10
По умолчанию Помогите с проблемой Потоков!

В общем следующая задача передо мной стояла! Надо было Считать и выводить на форму Размер выбранного файла! Через потоки и через WipApi функцию! Как я это пытался сделать

Код:
function MyProc(str: string):DWORD;
var P : Pointer;
i: integer;
begin
i:=GetFileSize(StrToCard(str),P);
MainForm.Label1.Caption := intToStr(i);
Result := 0;
end;

procedure TMainForm.BitBtn1Click(Sender: TObject);
Var thID:DWORD;
begin
CreateThread(NULL, 0, MyProc, MainForm.Name.Text, 0, thID);
end;
Admin: Пользуемся тегами!!!

И в общем то так не получается... Если так то ругается компилятор на строчку CreateThread вот таким матом Incompatible types: 'Variant' and 'Pointer'

Но даже если я просто вызываю функцию MyProc(MainForm.Name.Text); мне выдаёт в ответ не размер файла а значение -1 !!
Помогите пожалуйста кто нить....

Последний раз редактировалось Admin, 08.11.2009 в 22:16.
Ответить с цитированием
  #2  
Старый 08.11.2009, 22:55
Аватар для AllMaNi
AllMaNi AllMaNi вне форума
Новичок
 
Регистрация: 15.06.2009
Адрес: Россия, ЮФО
Сообщения: 57
Репутация: 10
По умолчанию

На счет создания нити это делается так:

Код:
function MyProc:bool;
begin
 ShowMessage('hi');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateThread(nil,0,@Myproc, nil, 0, Id1);
end;


Осознал ошибку?
__________________
Пусть ненавидят миллионы, зато любят тыщи (с) Многоточие
Ответить с цитированием
  #3  
Старый 08.11.2009, 23:07
Аватар для AllMaNi
AllMaNi AllMaNi вне форума
Новичок
 
Регистрация: 15.06.2009
Адрес: Россия, ЮФО
Сообщения: 57
Репутация: 10
По умолчанию

а насчет функции MyProc(MainForm.Name.Text) , то тебе ей в качестве параметра надо передать строку с путем к файлу.
А ты передаешь черти че.
__________________
Пусть ненавидят миллионы, зато любят тыщи (с) Многоточие
Ответить с цитированием
  #4  
Старый 09.11.2009, 18:27
MiRiN MiRiN вне форума
Прохожий
 
Регистрация: 08.11.2009
Сообщения: 3
Репутация: 10
По умолчанию

ну так mainform.name.text это и будет строка в которй путь к файлу...
Ответить с цитированием
  #5  
Старый 09.11.2009, 22:27
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

4 параметр в CreateThread это Pointer, указатель, а вы передаёте строку, тогда уж надо так:
Код:
function MyProc(str: pchar):DWORD;
var P : Pointer;
i: integer;
begin
i:=GetFileSize(StrToCard(str),P);
MainForm.Label1.Caption := intToStr(i);
Result := 0;
end;

procedure TMainForm.BitBtn1Click(Sender: TObject);
Var thID:DWORD;
begin
CreateThread(NULL, 0, MyProc, pchar(MainForm.Name.Text), 0, thID);
end;
либо эту строку сохранять в глобальной переменной, но здесь могут быть "погони" потоков

и кстати, установка переменных формы (vcl) из потока может (в определённых ситуациях) повиснуть оба потока, для этого нужно использовать функцию Synchronize
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;

Последний раз редактировалось AleD, 09.11.2009 в 22:30.
Ответить с цитированием
  #6  
Старый 13.11.2009, 12:21
6ruse 6ruse вне форума
Прохожий
 
Регистрация: 09.11.2009
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от MiRiN
В общем следующая задача передо мной стояла! Надо было Считать и выводить на форму Размер выбранного файла! Через потоки и через WipApi функцию! Как я это пытался сделать

Код:
function MyProc(str: string):DWORD;
var P : Pointer;
i: integer;
begin
i:=GetFileSize(StrToCard(str),P);
MainForm.Label1.Caption := intToStr(i);
Result := 0;
end;

procedure TMainForm.BitBtn1Click(Sender: TObject);
Var thID:DWORD;
begin
CreateThread(NULL, 0, MyProc, MainForm.Name.Text, 0, thID);
end;
Admin: Пользуемся тегами!!!

И в общем то так не получается... Если так то ругается компилятор на строчку CreateThread вот таким матом Incompatible types: 'Variant' and 'Pointer'

Но даже если я просто вызываю функцию MyProc(MainForm.Name.Text); мне выдаёт в ответ не размер файла а значение -1 !!
Помогите пожалуйста кто нить....
обязательно потоки??? а если Ttimer или это принципиально???
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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