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

Вниз

Трабл с CreateThread ..... Plz, help!   Найти похожие ветки 

 
Profffff   (2004-07-07 15:38) [0]

Создаю поток так:

CreateThread(nil, 0, @Session_Thread, @hClientSocket, 0, SessionThreadID);

Ф-ция Session_Thread имеет вид:

procedure Session_Thread(param: DWORD);

Переменная для передачи в дочерний поток hClientSocket типа 32-битное целое.

Проблема в том, что эта переменная НЕ передается по неизвестной причине в Session_Thread! Что не так?


 
Тимохов ©   (2004-07-07 15:44) [1]


>  Что не так?

не расшифорован термин "НЕ передается"

а вообще на фига вы указатель на переменную передаете, а не саму переменную? :))
переменная наверное локальная, в стеке - вот и лажа.

ЗЫ. Зачем изобретать велик - TThread чем не угодил?


 
Digitman ©   (2004-07-07 15:49) [2]


> по неизвестной причине


не передается она по давно известной причине - нежелание читать справку или невнимательное чтение оной

а в справке черным по белому сказано, что прототипом поточной функциии (!!!!) должен быть тип

TThreadFunc = function(Param: Pointer): Integer; stdcall;


 
y-soft ©   (2004-07-07 15:52) [3]

>Profffff   (07.07.04 15:38)

Используйте BeginThread

function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord; ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord; var ThreadId: LongWord): Integer;

Description

Use this routine or a TThread object to spawn separate threads of execution instead of calling the CreateThread Win32API directly. BeginThread encapsulates the Win32 CreateThread API call, but unlike CreateThread, it sets the global IsMultiThread variable, thereby making the heap thread-safe.

BeginThread takes a normal Pascal function as the thread function. Thread functions should handle all of their own exceptions. BeginThread sets up an exception frame that allows the system"s default exception handler to catch any of the thread"s exceptions that have not been handled.

Note: The application is terminated if there are any unhandled exceptions in the thread function.


 
Profffff   (2004-07-07 16:15) [4]

Ясно. Переделал ф-цию в вид
function Session_Thread(Param: Pointer): Integer; stdcall;

а при создании этого потока сделал так:
CreateThread(nil, 0, @Session_Thread, @hClientSocket, 0, SessionThreadID);

где hClientSocket - целое

Получаю Param в Session_Thread. Как мне его обратно преобразовать в целое? У меня выдается не то значение почему-то!


 
default ©   (2004-07-07 16:18) [5]

Profffff   (07.07.04 16:15) [4]
PInteger[PCardinal](Param)^ := NewValue


 
Digitman ©   (2004-07-07 16:26) [6]

CreateThread(nil, 0, @Session_Thread, Pointer(hClientSocket), 0, SessionThreadID);

function Session_Thread(hSocket: THandle): Integer; stdcall;
begin
..
end;


 
Alive ©   (2004-07-08 12:41) [7]


> прототипом поточной функциии (!!!!) должен быть тип

Согласен, но у меня почему то работает так:
procedure SchedulerThread (pPntr: Pointer); stdcall;


 
Digitman ©   (2004-07-08 12:45) [8]


> Alive ©   (08.07.04 12:41) [7]


угу.. работает .. до тех пор пока тебя не приспичит вернуть стандартным образом результат выполнения поточной ф-ции и получить его с пом. GetExitCodeThread()



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

Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.036 c
1-1091948374
gs
2004-08-08 10:59
2004.08.22
FAST REPORT правка полей пользователем (дизайнер)


9-1083352477
MrAngel
2004-04-30 23:14
2004.08.22
FDirect3D._Release - какой правильный спосоп освобождения обьекта


14-1091452821
СатирЪ
2004-08-02 17:20
2004.08.22
Перекодировщик


14-1090874948
Викусик
2004-07-27 00:49
2004.08.22
Ночной дозор


1-1092037671
Salik
2004-08-09 11:47
2004.08.22
Выделение строки в ListBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский