Главная страница
    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.033 c
14-1091744186
tsalBSM
2004-08-06 02:16
2004.08.22
Пркоил


1-1091701855
Stager
2004-08-05 14:30
2004.08.22
Многоколоночный TreeView


4-1089625023
DVM
2004-07-12 13:37
2004.08.22
CAD программно в Win9X


3-1090308378
Ani
2004-07-20 11:26
2004.08.22
Как отабражать в QuickReport е текущую дату в виде 5 июля 2004 го


1-1092067355
sdw_syscoder
2004-08-09 20:02
2004.08.22
Как запустить программу с высоким приоритетом?





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