Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
3-96138
Владий
2003-09-03 15:27
2003.09.29
Помогите с запросом - как посторить?..


1-96237
DrWeb
2003-09-11 15:41
2003.09.29
Вопрос о TChart Sereis (или точнее о создани своего типа графико)


14-96450
Layner
2003-09-10 10:02
2003.09.29
Посоветуйте хостинг. Возможно спец., для программиста. 1$-2$/мес


3-96092
AlexPul
2003-09-09 17:30
2003.09.29
Как вручную из командной строки запустить сервер Firebird ?


7-96462
Nevermind
2003-07-15 08:43
2003.09.29
Стили оформления (XP, Классический)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский