powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции с параметрами в отдельном потоке.
12 сообщений из 12, страница 1 из 1
Вызов функции с параметрами в отдельном потоке.
    #38907656
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет
Вызываю target_method(wstring[], int) с параметрами через функцию-оболочку execute_shell(const LPVOID), но почему-то не все параметры доходят непустыми: Значения массива содержат в себе "":


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
typedef struct ExecuteParameters1 
{
	wstring args[10];
	int argsCount = 0;
};


ExecuteParameters1 params;
params.args[0] = L"str";      //присваиваем значение элементу массива       
params.argsCount = argsCount;

HANDLE handle_of_comp = CreateThread(NULL, 0, execute_shell, &params, 0, NULL);



В функции-оболочке элемент массива args[0] имеет значение L"":

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DWORD WINAPI execute_shell(const LPVOID lpParam)
{
	ExecuteParameters1 params = *(ExecuteParameters1*)lpParam;

	wstring t = params.args[0];  //здесь t = L"";
	int g = params.argsCount;    //g = 10 как и передавалось

	target_method(params.args, params.argsCount);
	return 0;
}



Почему такое может быть?
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907666
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так что ли?

Код: plaintext
1.
ExecuteParameters1 *params = new ExecuteParameters1();
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907676
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisПочему такое может быть?
params выходит из области видимости и умирает раньше, чем поток доберётся до его чтения. В
результате он читает случайный мусор в чужом участке памяти. Радуйся, что не получаешь AV.
И, кстати, CreateThread использовать не надо. Надо использовать _beginthreadex.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907688
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
params выходит из области видимости и умирает раньше, чем поток доберётся до его чтения. В
результате он читает случайный мусор в чужом участке памяти.


Но вторая переменная int содержит то что передали, так что params не умерла. Она находится в вызывающем главном потоке.
Dimitry SibiryakovИ, кстати, CreateThread использовать не надо. Надо использовать _beginthreadex.

А что так?
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907692
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisА что так?
рантайм корректно в этом случае инициализируется
https://msdn.microsoft.com/library/windows/desktop/ms682453.aspx
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907694
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisНо вторая переменная int содержит то что передали
Знаешь, как говорят: "дуракам везёт".

Запомни: потоки запускаются довольно медленно. Функция, которая их запускает, обычно
успевает завершиться задолго до того, как начнёт выполняться код потока.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907696
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovrigorMortisНо вторая переменная int содержит то что передали
Знаешь, как говорят: "дуракам везёт".

Запомни: потоки запускаются довольно медленно. Функция, которая их запускает, обычно
успевает завершиться задолго до того, как начнёт выполняться код потока.


Я уже писал, params находится в вызывающем главном потоке. Он не завершается. И везение здесь ни при чём.
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907702
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisЯ уже писал, params находится в вызывающем главном потоке. Он не завершается. И везение здесь ни при чём.
А где вам говорили что поток завершается?
Было сказано " Функция , которая их запускает".

Приведите код функции лучше, а не обрывки.
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907770
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воткни после CreateThread()
Код: plaintext
1.
Sleep(100);


А по хорошему синхронизироваться через эвент или мьютекс.
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38907774
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis, почитай 16671612
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38908165
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВоткни после CreateThread()...
....гранату.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вызов функции с параметрами в отдельном потоке.
    #38908270
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TВоткни после CreateThread()...
....гранату.

Гранату он уже воткнул, только убежать не успевает
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции с параметрами в отдельном потоке.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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