Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Create(Remote)Thread, Что, когда лучше использовать? 
V
    Опции темы
anwe
Дата 10.2.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



В каких случаях "лучше\хуже" применять CreateThread и CreateRemoteThread, ведь CreateThread та же CreateRemoteThread, только с хэндлом вызывающего процесса?
Предполагаю ответ типа "В зависимости от того, что ты хочешь", " Как понять лучше\хуже" и т. д.
Поэтому конкретный вопрос: запустить поток в чужом процессе можно и через CreateRemoteThread, внедрившись в процесс, и через CreateThread, что находится в подгружаемой моей DLL'ке. Какой вариант предпочтительнее (с любых аспектов)?
PM MAIL   Вверх
586
Дата 10.2.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(anwe @  10.2.2008,  19:53 Найти цитируемый пост)
запустить поток в чужом процессе можно и через CreateRemoteThread

У тебя может нехватить прав вызвать поток в чужом процессе. Может антивирус эту функцию блокировать...
PM   Вверх
anwe
Дата 10.2.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Это я понимаю. Или это и есть ответ что предпочтительнее в этом аспекте?
Если ответ, то что еще?
PM MAIL   Вверх
W4FhLF
Дата 11.2.2008, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Второй вариант конечно лучше. Это правильнее с т.з. логики системы, требует меньше кода и прав. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
anwe
Дата 11.2.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Я так примерно и предполагал. Но "усилился" вопрос а когда применяется (стоит применять Remote?
PM MAIL   Вверх
asd
Дата 12.2.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 25.6.2006

Репутация: 1
Всего: 1



Цитата(anwe @  11.2.2008,  19:20 Найти цитируемый пост)
Я так примерно и предполагал. Но "усилился" вопрос а когда применяется (стоит применять Remote?


листинг ф-ии CreateThread:

MOV EDI,EDI
PUSH EBP
MOV EBP,ESP
PUSH DWORD PTR SS:[EBP+1C]
PUSH DWORD PTR SS:[EBP+18]
PUSH DWORD PTR SS:[EBP+14]
PUSH DWORD PTR SS:[EBP+10]
PUSH DWORD PTR SS:[EBP+C]
PUSH DWORD PTR SS:[EBP+8]
PUSH -1
CALL kernel32.CreateRemoteThread
POP EBP
RETN 18

Это всего лишь заглушка для CreateRemoteThread, которыя добавляет первым параметром -1. Так что для своего процесса разницы нет. Разве что быстрее будетsmile)) если CreateRemoteThread юзатьsmile



PM MAIL   Вверх
anwe
Дата 12.2.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Цитата(asd @  12.2.2008,  10:32 Найти цитируемый пост)
листинг ф-ии CreateThread:

А ты прям думаешь я не знаю и не видел этого. Я же писал:
Цитата(anwe @  10.2.2008,  18:53 Найти цитируемый пост)
CreateThread та же CreateRemoteThread, только с хэндлом вызывающего процесса

Мне интересно другое. Если 
Цитата(W4FhLF @  11.2.2008,  03:32 Найти цитируемый пост)
Второй вариант конечно лучше. Это правильнее с т.з. логики системы, требует меньше кода и прав

то когда правильнее первый вариант, когда стоит применять Remote?
PM MAIL   Вверх
maxdiver
Дата 17.2.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: нет
Всего: 18



Разве ответ не очевиден?? Логично создавать потоки в своем процессе через CreateThread, а в чужом - через CreateRemoteThread. Конечно, можно создавать потоки и в своем процессе через Remote, но это как-то нелогично совершенно, да и к тому же в 9x этой функции нет.
PM MAIL WWW ICQ   Вверх
ppoger
Дата 17.2.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.7.2007

Репутация: нет
Всего: нет



начнем с того, что напрямую вызывать функцию CreateThread вообще нелогично smile юзать нада _beginthread. меня не бейте. это все Рихтер:

Цитата

CreateTbread - это Windows-функция, создающая поток. Но никогда не вы зывайте ее, если Вы пишете код на С/С++ Вместо нее Вы должны использовать функцию beginthreadex из библиотеки Visual С++. 


Цитата

ляляляляля...
Так откуда же система знает, что при создании нового потока надо создать и этот блок данных? Ответ очень прост - не знает и знать не хочет. Вся ответственность — исключительно на Вас. Если Вы пользуетесь небезопасными в многопоточной среде функциями, то должны создавать потоки библиотечной функцией _beginthread, а не Windows-функцией CreateThread.


кому интересно тот прочитает сам.
PM MAIL   Вверх
anwe
Дата 17.2.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Цитата(maxdiver @  17.2.2008,  17:01 Найти цитируемый пост)
Логично создавать потоки в своем процессе через CreateThread, а в чужом - через CreateRemoteThread
 Интересное предложение. А я и не знал. smile
Вот именно
Цитата(ppoger @  17.2.2008,  22:28 Найти цитируемый пост)
если Вы пишете код на С/С++


PM MAIL   Вверх
ppoger
Дата 18.2.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.7.2007

Репутация: нет
Всего: нет



Цитата(anwe @  17.2.2008,  23:36 Найти цитируемый пост)
Вот именно


ну и что тебя не устраивает? раздел называется C/C++. Что вот именно то?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.