Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

Помогите разобраться и понять в чем я не прав...   Найти похожие ветки 

 
Nikulin ©   (2003-09-17 14:13) [0]

Есть у меня такой модуль.
Возникает такая ошибка когда процедура из потока пытается обратиться к переменной..
*********************
Project LoadTraffic.exe faulted with message: "access violation at 0x00418b40: write of address 0x0000000c". Process Stopped. Use Step or Run to continue.
*********************
unit uFileLoad;

interface

uses Classes, Windows, SysUtils;

type
TFileLoad = class
private
ThreadID: LongWord;
ThreadHandle: THandle;
TestCounter: Cardinal;

protected
procedure Execute;

public

constructor Create();
destructor Destroy();

function Stop(): Boolean;
function Start(): Boolean;
end;

implementation

procedure TFileLoad.Execute;
var
Counter: Byte;
begin
Counter := 0;
// Здесь возникает ошибка доступа к переменной(см выше )
TestCounter := 0;

while True do
begin
if Counter < 2 then
begin
Inc(Counter);
Sleep(1000);
Continue;
end;
Counter := 0;

Inc(TestCounter);
if TestCounter >= 500 then TestCounter := 0;
end;
end;

procedure PollingFTP(AFileLoad: TFileLoad);
begin
AFileLoad.Execute;
end;

constructor TFileLoad.Create();
begin
ThreadHandle := CreateThread(nil, 0, @PollingFTP,
Pointer(Self), CREATE_SUSPENDED, ThreadID);
end;

function TFileLoad.Start(): Boolean;
begin
ResumeThread(ThreadHandle);
Result := True;
end;

function TFileLoad.Stop(): Boolean;
begin
TerminateThread(ThreadHandle, 0);
Result := True;
end;

destructor TFileLoad.Destroy();
begin
end;

end.

*********************
Создаю и вызываю обьект так...

FileLoad := TFileLoad.Create;
FileLoad.Start;

........

FileLoad.Stop;
FileLoad.Destroy;

Помогите, а?


 
Palladin ©   (2003-09-17 14:17) [1]

Удивление вызывают декларации функций...
И кстати чем TThread не угодил?


 
Nikulin ©   (2003-09-17 14:20) [2]

> Удивление вызывают декларации функций

А что удивительного?


 
clickmaker ©   (2003-09-17 14:27) [3]

Семен Семеныч! А stdcall написать

function PollingFTP(Param: Pointer): Cardinal; stdcall


 
Palladin ©   (2003-09-17 14:28) [4]

а то что так фукнции декларируются в C


 
Nikulin ©   (2003-09-17 14:47) [5]

2 Palladin:

Спасибо за замечание. Касяк за мной :-)


 
Nikulin ©   (2003-09-17 14:48) [6]

2 clickmaker:

Не могли бы Вы пояснить как влияет stdcall ...
Пожалуйста...


 
clickmaker ©   (2003-09-17 15:13) [7]

MSDN:

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);


lpStartAddress

Pointer to the application-defined function of type LPTHREAD_START_ROUTINE to be executed by the thread and represents the starting address of the thread. For more information on the thread function, see ThreadProc.

DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
);


WINAPI эквивалентно stdcall.
В принципе, любые функции обратного вызова, использующиеся в Win API, должны быть stdcall


 
Nikulin ©   (2003-09-17 15:33) [8]

2 clickmaker: Спасибо.


 
me   (2003-09-17 15:44) [9]

>Nikulin ©
Лучше пользоваться ф-ей BeginThread (System.pas),
если ты, конечно, хочешь, чтобы твой поток умел обрабатывать исключения.

Она, кстати, требует fastcall-функцию


 
Владислав ©   (2003-09-17 15:57) [10]

"Прикольный" код...


 
pasha_golub ©   (2003-09-17 16:41) [11]

Palladin по поводу TThread совершенно верное замечание привел



Страницы: 1 вся ветка

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
7-96467
АлеКо
2003-07-18 09:36
2003.09.29
Определить ОС


1-96161
lejik
2003-09-18 10:32
2003.09.29
Имя процедуры


3-96055
АлеКс
2003-09-05 08:29
2003.09.29
Перенос данных


3-96130
John_nv
2003-09-06 01:24
2003.09.29
Создание индекса в dBase


4-96475
Slash
2003-07-28 14:18
2003.09.29
Определение владельца ресурса