powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateThread - проблемы выполнения
17 сообщений из 42, страница 2 из 2
CreateThread - проблемы выполнения
    #39985641
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function TestThread1(Prarameters:Pointer): Integer;
Begin
  Result := 0;
  New(LocalData);
  LocalData^ := Prarameters^;
  LocalData.Data1 := 4321;
  Sleep(200);
  //...
  Sendmessage (MainHandle, WM_DATA_UPDATE, 123, Integer(@MessageData) );
  EndThread(0);
End;
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985647
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичЕсли бы там были локальные переменные, такого бы не произошло, осталось бы значение 0. Или
я всё ещё продолжаю что-то не понимать.

Походу да, ты продолжаешь не понимать, что у тебя локальные переменные - указатели на
глобальный кусок памяти.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985660
Dimitry Sibiryakov

Андрей ИгоревичЕсли бы там были локальные переменные, такого бы не произошло, осталось бы значение 0. Или
я всё ещё продолжаю что-то не понимать.

Походу да, ты продолжаешь не понимать, что у тебя локальные переменные - указатели на
глобальный кусок памяти.

Ну дак я о том и пишу. Но вот что пишут на delphibasics
http://www.delphibasics.ru/BeginThread.php // Указываем указатель на переданные данные
// Обратите внимание, что каждый поток имеет отдельную копию msgPtr

или товарищи форумчане
YuRock
Андрей Игоревич
Но ^TMsgRecord указатель на тот же участок памяти, отдельных копий же нет?
Именно отдельные копии и будут для каждого потока при threadvar.

А я не вижу копий, я вижу копию указателя. Потому и спрашиваю.

Zelius
Андрей Игоревич,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function TestThread1(Prarameters:Pointer): Integer;
Begin
  Result := 0;
  New(LocalData);
  LocalData^ := Prarameters^;
  LocalData.Data1 := 4321;
  Sleep(200);
  //...
  Sendmessage (MainHandle, WM_DATA_UPDATE, 123, Integer(@MessageData) );
  EndThread(0);
End;


Ну это понятно, но проще уж тогда просто переменную в ThreadVar сразу забить, кода меньше будет.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985662
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичНу дак я о том и пишу.

delphibasics// Указываем указатель на переданные данные
// Обратите внимание, что каждый поток имеет отдельную копию msgPtr (этого указателя -
прим.ред)
форумчане Именно отдельные копии (указателя - прим.ред) и будут для каждого потока при threadvar.

Ну, вы все пишете одно и то же. Что именно тебя смущает-то?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985663
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем нужда велосипед изобретать? Давно есть высокоуровневые обертки...
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985667
Dimitry Sibiryakov

delphibasics// Указываем указатель на переданные данные
// Обратите внимание, что каждый поток имеет отдельную копию msgPtr (этого указателя -
прим.ред)



Ну дак во втором предложении суть, там указывают указатель (как коряво звучит), но получают отдельную копию. В указанном примере нет отдельной копии msgPtr, только "ссылка" на него в памяти.
// Указываем указатель на переданные данные
// Обратите внимание, что каждый поток имеет отдельную копию msgPtr

Или фраза "отдельная копия указателя объекта" и "отдельная копия объекта" это одно и то же?

Ладно, суть я уже банальным тестированием понял, обновлять главный поток будут через Showmessage. Жаль нет способа поудобнее, всё таки очень громоздко передавать сообщения, мне BeginThread как раз и заинтересовала тем, что намного компактнее, чем класс TThread, а так уже и не так компактно.

white_nigger
А в чем нужда велосипед изобретать? Давно есть высокоуровневые обертки...

Ну я просто осваиваю функционал, читал чужой код, наткнулся, решил разобраться. Ни и показалось, что компактнее чем класс.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985668
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичВ указанном примере нет отдельной копии msgPtr, только "ссылка" на него в памяти.

Бредить не надо. Нет там никакой ссылки. Оператор присваивания копирует значение указателя
в локальную переменную. Всё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985669
Dimitry Sibiryakov

Андрей ИгоревичВ указанном примере нет отдельной копии msgPtr, только "ссылка" на него в памяти.

Бредить не надо. Нет там никакой ссылки. Оператор присваивания копирует значение указателя
в локальную переменную. Всё.

Это я про "физический смысл" указателя. "Ссылка" на ячейку в памяти. Ладно, это уже не важно.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985670
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичЭто я про "физический смысл" указателя. "Ссылка" на ячейку в памяти.

Почувствуйте разницу между операторами ":=" и "@".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985701
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич

white_nigger
А в чем нужда велосипед изобретать? Давно есть высокоуровневые обертки...

Ну я просто осваиваю функционал, читал чужой код, наткнулся, решил разобраться. Ни и показалось, что компактнее чем класс.


Ничего там компактного нет! На первый взгляд так может показаться. А код автоматически становится сложнее, используется тип Pointer, который каждый интерпретирует по своему. Таким потоком сложнее управлять. В голову лезут безумные идеи написания кода, в том числе с использованием threadvar.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985718
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Андрей Игоревич

пропущено...

Ну я просто осваиваю функционал, читал чужой код, наткнулся, решил разобраться. Ни и показалось, что компактнее чем класс.


Ничего там компактного нет! На первый взгляд так может показаться. А код автоматически становится сложнее, используется тип Pointer, который каждый интерпретирует по своему. Таким потоком сложнее управлять. В голову лезут безумные идеи написания кода, в том числе с использованием threadvar.
По своему опыту, могу сказать, что польза от "ручного" использования Begin/CreateThread одна (с другими неудобствами я не сталкивался) : можно указать размер стека - это бывает важно (странно, что в TThread не добавили поля для указания в конструкторе при необходимости).
По-умолчанию потоку под стек мегабайт выделяется обычно, хотя часто за глаза несколько десятков кб хватит. Для 32-бит программ это может быть чрезвычайно критично при запуске нескольких сотен потоков, уж про тысячу не говорю.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985719
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Андрей Игоревич

пропущено...

Ну я просто осваиваю функционал, читал чужой код, наткнулся, решил разобраться. Ни и показалось, что компактнее чем класс.


Ничего там компактного нет! На первый взгляд так может показаться. А код автоматически становится сложнее, используется тип Pointer, который каждый интерпретирует по своему. Таким потоком сложнее управлять. В голову лезут безумные идеи написания кода, в том числе с использованием threadvar.
По своему опыту, могу сказать, что польза от "ручного" использования Begin/CreateThread одна (с другими неудобствами я не сталкивался) : можно указать размер стека - это бывает важно (странно, что в TThread не добавили поля для указания в конструкторе при необходимости).
По-умолчанию потоку под стек мегабайт выделяется обычно, хотя часто за глаза несколько десятков кб хватит. Для 32-бит программ это может быть чрезвычайно критично при запуске нескольких сотен потоков, уж про тысячу не говорю.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985744
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-умолчанию потоку под стек мегабайт выделяется обычно, хотя часто за глаза несколько десятков кб хватит. Для 32-бит программ это может быть чрезвычайно критично при запуске нескольких сотен потоков, уж про тысячу не говорю

64-битная винда добавит ещё по 256 КБ на каждый поток.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985775
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer64-битная винда добавит ещё по 256 КБ на каждый поток.

Она, к счастью, даст ещё и офигенного размера адресное пространство, которое позволит не
заботиться о таких мелочах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985789
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

DmSer64-битная винда добавит ещё по 256 КБ на каждый поток.

Она, к счастью, даст ещё и офигенного размера адресное пространство, которое позволит не
заботиться о таких мелочах.


К сожалению , если приложение 32-битное, для него сужается адресное пространство в 64-битной винде.

Если приложение 64-битное, то про размер стека и адресное пространство можно не задумываться.
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985798
DmSer
Андрей Игоревич

пропущено...

Ну я просто осваиваю функционал, читал чужой код, наткнулся, решил разобраться. Ни и показалось, что компактнее чем класс.


Ничего там компактного нет! На первый взгляд так может показаться. А код автоматически становится сложнее, используется тип Pointer, который каждый интерпретирует по своему. Таким потоком сложнее управлять. В голову лезут безумные идеи написания кода, в том числе с использованием threadvar.

Жуть какая. Буду осторожнее. :)
...
Рейтинг: 0 / 0
CreateThread - проблемы выполнения
    #39985800
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичБуду осторожнее. :)

Да, всеми силами избегай написания кода. Там могут завестись идеи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateThread - проблемы выполнения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]