powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / скоро сойду с ума..
8 сообщений из 8, страница 1 из 1
скоро сойду с ума..
    #34828789
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не могу разобраться второй день..

код с сокращениями, ОС WinXP:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	...
	hThread = (HANDLE)_beginthreadex( NULL,  0 , &myFunc, NULL, CREATE_SUSPENDED, NULL );
	SetThreadPriority(hThread, THREAD_PRIORITY_LOWEST);  // [А]
	ResumeThread(hThread); // [1]
	CloseHandle(hThread);	

	hThread = (HANDLE)_beginthreadex( NULL,  0 , &myFunc, NULL, CREATE_SUSPENDED, NULL );
	SetThreadPriority(hThread, THREAD_PRIORITY_LOWEST);  // [Б]
	ResumeThread(hThread); // [2]
	CloseHandle(hThread);	

	void Функция_использующая_Process32First_чтобы достать_нужный_мне_handle_процесса();
	...

если все собираю в exe, то работает, но если dll, то Process32First() не срабатывает (GetLastError() == 24)

Далее, обнаружил чисто случайно, комменчу 2 строчки [1] & [2] и все работает как надо, также можно закомментить [А] & [Б], тоже будет работать. Но! Комментить нужно парами, т.е. если убрать одну из строчек из кода, то Process32First() работать в dll не будет!! Я решил, что вперед созданные потоки каким-то чудом воздействуют на Process32First() и перенес ее вызов до создания обоих потоков. Но фокусы c [1] & [2] || [А] & [Б] продолжаются! Очень нужно стороннее мнение, я уже ничего не смогу придумать.

Да, кстати, Process32First() в созданных потоках работает без проблем.
...
Рейтинг: 0 / 0
скоро сойду с ума..
    #34829132
1211212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MSDN говорит о счетчике, который "ResumeThread" уменьшает. Может он здесь -
Код: plaintext
1.
hThread = (HANDLE)_beginthreadex( NULL,  0 , &myFunc, NULL, CREATE_SUSPENDED, NULL );
- не инициализируется?
...
Рейтинг: 0 / 0
скоро сойду с ума..
    #34829163
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1211212MSDN говорит о счетчике, который "ResumeThread" уменьшает. Может он здесь -
Код: plaintext
1.
hThread = (HANDLE)_beginthreadex( NULL,  0 , &myFunc, NULL, CREATE_SUSPENDED, NULL );
- не инициализируется?

так когда я этот код с "ResumeThread" сношу ниже злополучного места, то выходит система умеет предсказывать, что он не проинициализируется?? нет, потоки создаются нормально, и до и после вредного места..
...
Рейтинг: 0 / 0
скоро сойду с ума..
    #34829165
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А CloseHandle(hThread) нафига? В хелпе четко же написано, Therefore, when using _beginthread and _endthread, do not explicitly close the thread handle by calling the Win32 CloseHandle API.
...
Рейтинг: 0 / 0
скоро сойду с ума..
    #34829197
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичА CloseHandle(hThread) нафига? В хелпе четко же написано, Therefore, when using _beginthread and _endthread, do not explicitly close the thread handle by calling the Win32 CloseHandle API.

Я же использую не _beginthread, а _beginthreadex
Richter
Однако с функцией _endthread дело обстоит куда хуже, чем кажется: перед вызовом ExitThread она обращается к CloseHandle и передает ей описатель нового потока.


Richter
Новая функция _endthreadex, не закрывает описатель потока..


поэтому закрываю хендл спокойно, т.к. он мне болше не нужен, а после могу забыть это сделать..
...
Рейтинг: 0 / 0
скоро сойду с ума..
    #34830141
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik пишет:
> поэтому закрываю хендл спокойно, т.к. он мне болше не нужен, а после
> могу забыть это сделать..

Ну хэндлы-то можно вообще не закрывать , а как это относится к
Process32First - я не знаю. Наверняка ты неправильно обращаешся
с функциями ToolHelp. Я к сожалению не эксперт, но вот когда ты
снапшот создаешь ? CreateToolhelp32Snapshot когда вызываешь ?
До этого всего, или после ? Думаю, что если до, то Win32 может
запросто изключить эти новые треды или процессы, изменившиеся
после, из этого снапшота.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
скоро сойду с ума..
    #34830602
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Tubrik пишет:
> поэтому закрываю хендл спокойно, т.к. он мне болше не нужен, а после
> могу забыть это сделать..

Ну хэндлы-то можно вообще не закрывать , а как это относится к
Process32First - я не знаю. Наверняка ты неправильно обращаешся
с функциями ToolHelp. Я к сожалению не эксперт, но вот когда ты
снапшот создаешь ? CreateToolhelp32Snapshot когда вызываешь ?
До этого всего, или после ? Думаю, что если до, то Win32 может
запросто изключить эти новые треды или процессы, изменившиеся
после, из этого снапшота.
Posted via ActualForum NNTP Server 1.4

Вызываю и до и после, я это уже описал в самом начале топика, может непонятно описал..

С ToolHelp обращаюсь правильно, по крайней мере так считаю, т.к. тестил можество раз, все было прекрасно, пока не заморочился с приоритетом потоков. Самое удивительное, что когда хотел для форума собрать и выложить укороченный вариант исходного кода, то повторить проблему не удалось, т.е. все работает как и должно, как в exe, так и в длл, но найти в этом факте путь к решению проблемы не смог пока что..
...
Рейтинг: 0 / 0
скоро сойду с ума..
    #34831354
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема закрыта.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / скоро сойду с ума..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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