но — любой код после этой строчки — не выполняется, как будто его нет и в помине! В чем ошибка у меня не могу понять? А если я, например, хочу написать еще одно создание треда непосредственно после первого,
А>но — любой код после этой строчки — не выполняется, как будто его нет и в помине! В чем ошибка у меня не могу понять? А если я, например, хочу написать еще одно создание треда непосредственно после первого, А>
ищите ошибку, Вы же понимаете, что она у Вас, а не в CreateThread. Или приведите побольше кода.
Например, как узнали, что не выполняется? мб thread завершил уже приложение. Тогда и не выполниться
А>>а он не исполняется, то как быть?
А что такое lpThreadAttributes, lpThreadId ? Попробуй нули поставить.
Re[2]: CreateThread
От:
Аноним
Дата:
30.01.10 09:09
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:
СМ>ищите ошибку, Вы же понимаете, что она у Вас, а не в CreateThread. Или приведите побольше кода. СМ>Например, как узнали, что не выполняется? мб thread завершил уже приложение. Тогда и не выполниться
В этом создаваемом треде, в функции MyFunction, у меня бесконечный цикл, так задумано и нужно, тред нормально запускается-работает,я же говорю -любой код после этой указанной выше строки создания треда НЕ ВЫПОЛНЯЕТСЯ, что бы ни было, так и проверил — написал после этой строки разные команды — до них дело не доходит, как будто их и нет! Какой бы ни был код в MyFunction — без разницы, функция Main, после CreateThread, заканчивается (или даже не знаю, что с ней происходит), но CreateThread — все равно должен быть в Main последней командой!
Re[3]: CreateThread
От:
Аноним
Дата:
30.01.10 09:16
Оценка:
Здравствуйте, Огнеплюх, Вы писали:
А>>>а он не исполняется, то как быть? О>А что такое lpThreadAttributes, lpThreadId ? Попробуй нули поставить.
Соответственно — указатель на структуру и на идентификатор треда, по параметрам функции, как и требуется, нули ставил — не работает с ними!
А>но — любой код после этой строчки — не выполняется, как будто его нет и в помине! В чем ошибка у меня не могу понять? А если я, например, хочу написать еще одно создание треда непосредственно после первого, А>
Здравствуйте, Аноним, Вы писали:
СМ>>Например, как узнали, что не выполняется? мб thread завершил уже приложение. Тогда и не выполниться
А>В этом создаваемом треде, в функции MyFunction, у меня бесконечный цикл, так задумано и нужно, тред нормально запускается-работает,я же говорю -любой код после этой указанной выше строки создания треда НЕ ВЫПОЛНЯЕТСЯ, что бы ни было, так и проверил — написал после этой строки разные команды — до них дело не доходит, как будто их и нет! Какой бы ни был код в MyFunction — без разницы, функция Main, после CreateThread, заканчивается (или даже не знаю, что с ней происходит), но CreateThread — все равно должен быть в Main последней командой!
Ничего не понял, какие команды? я не помню, что бы в С/C++ были команды.
Может просто в отладчике точку останова поставить?
Можно просто привести маленький пример? на котором бы проявилось все коварство CreateThread?
Может надо поставить ожидание после CreateThread? Например WaitForSingleObject?
---
С уважением,
Сергей Мухин
Re[2]: CreateThread
От:
Аноним
Дата:
31.01.10 16:03
Оценка:
Здравствуйте, fkRTTI, Вы писали: http://www.rsdn.ru/ RTT>Так будет работать 100%
RTT>
Хм, вообще-то я привел функцию Win API для Visual Basic-а, я пробовал myl = CreateThread(Null, 0, MyFunction, Null, 0, lpThreadId) — не работало, только мой вариант сработал, но и тогда, все равно, после CreateThread, ни одна функция,господин Мухин, любая, какая только вам в голову придет — не выполняется и никакие точки останова не влияют и не помогают делу! Я разве неясно говорю?, у меня "CreateThread" нормально выпоняется, я на него не жалуюсь, я жалуюсь, что ПОСЛЕ этой функции ничего не выполняется (в том числе и еще один CreateThread)!!! Ой, мама...
RTT>>HANDLE thread1 = CreateThread(NULL, 0, MyFunction, Null, 0, &dwThreadId1); А>Хм, вообще-то я привел функцию Win API для Visual Basic-а, я пробовал myl = CreateThread(Null, 0, MyFunction, Null, 0, lpThreadId) — не работало, только мой вариант сработал, но и тогда, все равно, после CreateThread, ни одна функция,господин Мухин, любая, какая только вам в голову придет — не выполняется и никакие точки останова не влияют и не помогают делу! Я разве неясно говорю?, у меня "CreateThread" нормально выпоняется, я на него не жалуюсь, я жалуюсь, что ПОСЛЕ этой функции ничего не выполняется (в том числе и еще один CreateThread)!!! Ой, мама...
меня терзают смутные сомнения по поводу вижуал бейсика... а не нужно ли в нем случайно явно брать указатель от функции?
Как много веселых ребят, и все делают велосипед...
Поставьте точку останова на второй функции — и дождитесь дойдет ли до нее очередь. MyFunction и MyOtherFunction можно сделать пустышками — это не имеет значения,все равно до второго CreateThread-а дело не дойдет (запустится только MyFunction). Надеюсь, достаточно?
Re[4]: CreateThread
От:
Аноним
Дата:
01.02.10 14:58
Оценка:
Здравствуйте, ononim, Вы писали:
O>меня терзают смутные сомнения по поводу вижуал бейсика... а не нужно ли в нем случайно явно брать указатель от функции?
Зачем и как брать еще явнее? MyFunction выполняется, не выполняется СЛЕДУЮЩИЙ идентичный запуск треда с точно такой же как MyFunction -МyOtherFunction! Да и вообще любая другая функция после функции myl = CreateThread(ThreadAttributes, 0, MyFunction, Null, 0, ThreadId) ме выполняется!!!
Здравствуйте, Аноним, Вы писали:
СМ>>Как я понял, примера, как этот эффект проявляется так и не будет.
А>Уважаемый господин Сергей Мухин, вот например такая последоватрельность функций в проекте Visual Basic-а: А>
А>Поставьте точку останова на второй функции — и дождитесь дойдет ли до нее очередь. MyFunction и MyOtherFunction можно сделать пустышками — это не имеет значения,все равно до второго CreateThread-а дело не дойдет (запустится только MyFunction). Надеюсь, достаточно?
Вы странный однако, Вас уже четвертый раз просят пример , а Вы куски показываете.
Я взял эти две строки и они выдали мне куча ошибок. У меня нет времени что бы разбираться в них приведите, так что бы воспроизводилось, и вас помогут.
Error 1 Name 'myl' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 5 9 ConsoleApplication1
Error 2 Name 'CreateThread' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 5 15 ConsoleApplication1
Error 3 Name 'lpThreadAttributes' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 5 28 ConsoleApplication1
Error 4 Name 'MyFunction' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 5 51 ConsoleApplication1
Error 5 'Null' is not declared. 'Null' constant is no longer supported; use 'System.DBNull' instead. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 5 63 ConsoleApplication1
Error 6 Name 'lpThreadId' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 5 72 ConsoleApplication1
Error 7 Name 'myl' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 6 9 ConsoleApplication1
Error 8 Name 'CreateThread' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 6 15 ConsoleApplication1
Error 9 Name 'lpThreadAttributes' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 6 28 ConsoleApplication1
Error 10 Name 'MyOtherFunction' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 6 51 ConsoleApplication1
Error 11 'Null' is not declared. 'Null' constant is no longer supported; use 'System.DBNull' instead. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 6 68 ConsoleApplication1
Error 12 Name 'lpThreadId' is not declared. d:\pdc\VVVVV\ConsoleApplication1\ConsoleApplication1\Module1.vb 6 77 ConsoleApplication1
O>>меня терзают смутные сомнения по поводу вижуал бейсика... а не нужно ли в нем случайно явно брать указатель от функции? А>Зачем и как брать еще явнее? MyFunction выполняется, не выполняется СЛЕДУЮЩИЙ идентичный запуск треда с точно такой же как MyFunction -МyOtherFunction! Да и вообще любая другая функция после функции myl = CreateThread(ThreadAttributes, 0, MyFunction, Null, 0, ThreadId) ме выполняется!!!
Затем что быть может в вашем случае происходит вызов MyFunction, затем запуск потока с start routine — то что вернула MyFunction. В данном случае поскольку MyFunction работает вечно вы получаете затык. В противном случае с большой вероятностью получите крэш после завершения MyFunction.
Я конечно в VB ни бум-бум, но сдается мне то, что указание MyFunction без скобочек является аналогом указателя на функцию в C++ отнюдь не факт что распространяется на VB
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>>>меня терзают смутные сомнения по поводу вижуал бейсика... а не нужно ли в нем случайно явно брать указатель от функции? А>>Зачем и как брать еще явнее? MyFunction выполняется, не выполняется СЛЕДУЮЩИЙ идентичный запуск треда с точно такой же как MyFunction -МyOtherFunction! Да и вообще любая другая функция после функции myl = CreateThread(ThreadAttributes, 0, MyFunction, Null, 0, ThreadId) ме выполняется!!! O>Затем что быть может в вашем случае происходит вызов MyFunction, затем запуск потока с start routine — то что вернула MyFunction. В данном случае поскольку MyFunction работает вечно вы получаете затык. В противном случае с большой вероятностью получите крэш после завершения MyFunction. O>Я конечно в VB ни бум-бум, но сдается мне то, что указание MyFunction без скобочек является аналогом указателя на функцию в C++ отнюдь не факт что распространяется на VB
и надо правильно объявить CreateThread. Ну раз автор код не показывает, то ничё подробнее сказать не могу. Null это VARIANT с .vt = VT_NULL
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[6]: CreateThread
От:
Аноним
Дата:
02.02.10 19:18
Оценка:
Здравствуйте, ononim, Вы писали:
O>Затем что быть может в вашем случае происходит вызов MyFunction, затем запуск потока с start routine — то что вернула MyFunction. В данном случае поскольку MyFunction работает вечно вы получаете затык. В противном случае с большой вероятностью получите крэш после завершения MyFunction. O>Я конечно в VB ни бум-бум, но сдается мне то, что указание MyFunction без скобочек является аналогом указателя на функцию в C++ отнюдь не факт что распространяется на VB
Давно хочу поблагодарить Вас, ononim, за вашу светлую голову, мне думается, вы правы насчет "затыка", я — типичный идиот, не подумал и машинально не обратил внимания на такую "мелочь" — что неверно ждать возврата от моей "вечной" MyFunction! Крэша вроде пока не было, но убить мой процесс во время logoff-a компа, при моей безмозглой "реализации", не получится, а после вашего верного замечания наверняка все получится! Спасибо вашим маме и папе, что подарили нам Вас, ononim!
П.С.
Я не корифей VB, но как раз скобочки вроде указатель функции бы и предполагали, а я лишь должен был написать
вроде того...
Were i Zamunda, AddressOf здесь не нужен, вроде я пробовал — тогда ошибку дает...
П.П.С.
Сергей Мухин — спасибо за муки творчества,признателен за внимание! Я не привожу Declare, ибо как и все копирую WIN API, как и должно!
Всем — спасибо за участие!
Здравствуйте, Аноним, Вы писали:
А>Were i Zamunda, AddressOf здесь не нужен, вроде я пробовал — тогда ошибку дает... :(
Не может такого быть. Не пробовали вы ничего, если такое говорите.
А>Сергей Мухин — спасибо за муки творчества,признателен за внимание!:) Я не привожу Declare, ибо как и все копирую WIN API, как и должно!
В MSDN приведены декларации на C, и неправильный перевод их на VB это самая частая ошибка. Даже базы с готовыми декларациями, которыми вам стоило бы воспользоваться (ApiViewer 200x например), не всегда верны.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
не ну етоже п..ц какой то. Я не эти скобки имел ввиду.
В С++ — MyFunction() — это вызов MyFunction. MyFunction — это указатель на MyFunction, тоже самое что &MyFunction.
В VB, по моим смутным воспоминаниям QBasic'а — MyFunction — это вызов MyFunction. Значит должен быть некий оператор указателя чтобы взять указатель, ибо написание имени функции в нем это ее вызов.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Здравствуйте, Аноним, Вы писали:
А>>Were i Zamunda, AddressOf здесь не нужен, вроде я пробовал — тогда ошибку дает... ZAM>Не может такого быть. Не пробовали вы ничего, если такое говорите.
А>>Сергей Мухин — спасибо за муки творчества,признателен за внимание! Я не привожу Declare, ибо как и все копирую WIN API, как и должно! ZAM>В MSDN приведены декларации на C, и неправильный перевод их на VB это самая частая ошибка. Даже базы с готовыми декларациями, которыми вам стоило бы воспользоваться (ApiViewer 200x например), не всегда верны.
Короче. На будущее. Если хотите чтобы Вам помогли быстро — выдавайте весь проблемный текст. Можно его конечно минимизировать, и часто, при минимизации люди сами находят ошибки