Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Plutonia Experiment, Вы писали:
PE>>Чтобы будить поток, нужно юзать SleepEx
А>Хорошо. Как разбудить поток, если я юзаю SleepEx?
PE>>Чтобы будить поток, нужно юзать SleepEx
D>Что то я не вкурил, как это при использовании SleepEx можно потом разбудить поток, т.е. продолжить выполнять именно туже самую функцию?
Плохую траву, видимо, покупаете. Срочно меняйте поставщика. Я вот обычно MSDN курю:
If bAlertable is TRUE and the thread that called this function is the same thread that called the extended I/O function (ReadFileEx or WriteFileEx), the function returns when either the time-out period has elapsed or when an I/O completion callback function occurs. If an I/O completion callback occurs, the I/O completion function is called. If an APC is queued to the thread (QueueUserAPC), the function returns when either the timer-out period has elapsed or when the APC function is called.
Здравствуйте, Andrew S, Вы писали:
PE>>>>Чтобы будить поток, нужно юзать SleepEx А>>>Хорошо. Как разбудить поток, если я юзаю SleepEx? BH>>Мля... А ResumeThread чем тебе не будилка???
AS>??? Интересно, как это при помощи ResumeThread можно заставить поток выйти из Sleep(Ex) ?
Вооще нужно спросить, для чего вообще вызывать Sleep(INFINITE)
Здравствуйте, Andrew S, Вы писали:
PE>>>>Чтобы будить поток, нужно юзать SleepEx
А>>>Хорошо. Как разбудить поток, если я юзаю SleepEx?
BH>>Мля... А ResumeThread чем тебе не будилка???
AS>??? Интересно, как это при помощи ResumeThread можно заставить поток выйти из Sleep(Ex) ?
И я про тоже: человек вызывает Sleep(INFINITE), останавливает выполнение потока теоретически навсегда, и хочет его разбудить... Где логика?
Автору топика: А вообще, по существу, если уж очень хочется усыплять/будить потоки, то способов куча... Эвенты пресловутые хотя-бы.
AS>>??? Интересно, как это при помощи ResumeThread можно заставить поток выйти из Sleep(Ex) ?
PE>Вооще нужно спросить, для чего вообще вызывать Sleep(INFINITE)
Здравствуйте, Andrew S, Вы писали:
PE>>>>Чтобы будить поток, нужно юзать SleepEx
А>>>Хорошо. Как разбудить поток, если я юзаю SleepEx?
BH>>Мля... А ResumeThread чем тебе не будилка???
AS>??? Интересно, как это при помощи ResumeThread можно заставить поток выйти из Sleep(Ex) ?
??? Интересно, как это не читая MSDN можно чего то путное написать ?
Здравствуйте, Andrew S, Вы писали:
AS>>>??? Интересно, как это при помощи ResumeThread можно заставить поток выйти из Sleep(Ex) ? PE>>Вооще нужно спросить, для чего вообще вызывать Sleep(INFINITE) AS>Ну, в данном случае, наверное, проблема в ДНК
Я по прототе душевной думал, что чел просто спутал Sleep и SleepEx, а он оказывается эмулирует механизмы синхронизации.
BH>>>Мля... А ResumeThread чем тебе не будилка???
AS>>??? Интересно, как это при помощи ResumeThread можно заставить поток выйти из Sleep(Ex) ?
BH>??? Интересно, как это не читая MSDN можно чего то путное написать ?
Здравствуйте, Andrew S, Вы писали:
BH>>>>Мля... А ResumeThread чем тебе не будилка???
AS>>>??? Интересно, как это при помощи ResumeThread можно заставить поток выйти из Sleep(Ex) ?
BH>>??? Интересно, как это не читая MSDN можно чего то путное написать ?
AS>Это Вы о чем? Яснее выражайтесь, коллега
Выясняюсь яснее, я напряженно работал весь день — торможу не по детски.
Здравствуйте, Andrew S, Вы писали:
A>>SuspendThread A>>ResumeThread
AS>Какое это отношение имеет к вопросу?
Такое что усыплать его через Sleep ИМХО не правильно
Здравствуйте, Denwer, Вы писали:
D>Здравствуйте, Plutonia Experiment, Вы писали:
D>Что то я не вкурил, как это при использовании SleepEx можно потом разбудить поток, т.е. продолжить выполнять именно туже самую функцию?
У ф-и SleepEx второй параметр bool-вого типа, так вот передав туда true вы заставляете систему в момент спячки потока ждать не только time-out, а также проверять APC (асинхронная процедурная очередь) на наличие сообщений в ней, и отсюда следует что для того чтоб "разбудить" поток — достаточно вставить в эту очередь сообщение
делается это при помощи ф-и
QueueUserAPC(
PAPCFUNC pfnAPC, // APC function
HANDLE hThread, // handle to thread
ULONG_PTR dwData // APC function parameter
).
Ф-я SleepEx вернет DWORD: если оно равно WAIT_IO_COMPLETION значит поток пробудился из-за появления в очереди APC некоего сообщения (от вас т.е.), если оно равно NULL значит истек time-out.
Здравствуйте, Andrew S, Вы писали:
PE>>>Чтобы будить поток, нужно юзать SleepEx
D>>Что то я не вкурил, как это при использовании SleepEx можно потом разбудить поток, т.е. продолжить выполнять именно туже самую функцию?
AS>Плохую траву, видимо, покупаете. Срочно меняйте поставщика. Я вот обычно MSDN курю: AS>
AS>If bAlertable is TRUE and the thread that called this function is the same thread that called the extended I/O function (ReadFileEx or WriteFileEx), the function returns when either the time-out period has elapsed or when an I/O completion callback function occurs. If an I/O completion callback occurs, the I/O completion function is called. If an APC is queued to the thread (QueueUserAPC), the function returns when either the timer-out period has elapsed or when the APC function is called.
У Рихтера есть книжка про написание сервисов. Там это дело разжёвывается.
Здравствуйте, Andrew S, Вы писали:
PE>>>Чтобы будить поток, нужно юзать SleepEx
D>>Что то я не вкурил, как это при использовании SleepEx можно потом разбудить поток, т.е. продолжить выполнять именно туже самую функцию?
AS>Плохую траву, видимо, покупаете. Срочно меняйте поставщика. Я вот обычно MSDN курю: AS>
AS>If bAlertable is TRUE and the thread that called this function is the same thread that called the extended I/O function (ReadFileEx or WriteFileEx), the function returns when either the time-out period has elapsed or when an I/O completion callback function occurs. If an I/O completion callback occurs, the I/O completion function is called. If an APC is queued to the thread (QueueUserAPC), the function returns when either the timer-out period has elapsed or when the APC function is called.
Да читал я эту вещь, вот токо при ответе на вопрос я именно подчеркнул, что надо продолжить выполнять именно туже самую функцию, а то что в поток можно засунуть вызов APC функции это понятно, да и к тому же может ему и не надо всякие оверлаппеды.Т.е. например разве можно сделать такое?
UINT ThreadBody(LPVOID param)
{
int a = 10;
SleepEx(INFINITE, TRUE);
a += 20;
}
Вот на команде слип он заснет, что надо вызвать что бы продолжить выполнение?
ЗЫ: Не надо понимать букваль сказаные слова, это понятно что его можно разбудить, но это же будет совсем другое разбуждение чем например при использовании эвента, а автору(я больше чем уверен) нужен именно такой случай.
Re[8]: Разбудить поток
От:
Аноним
Дата:
18.12.03 06:59
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Я по прототе душевной думал, что чел просто спутал Sleep и SleepEx, а он оказывается эмулирует механизмы синхронизации.
Да ты, я вижу, "умен не по годам"... или мухоморов объелся.
Да еще и колдовством, видимо, промышляешь — толи между строк читать научился, толи мыслишки чужие угадывать пытаешься.
Я тебе напою пивом до поноса, если ты покажешь мне место, где _я_ сказал ту туфту, про эмуляцию механизмов синхронизации...
Просто мне пришла в голову совершенно нормальная мысль — если поток можно усыпить на неопределенное время, то, вероятно, должен быть метод вывести его оттуда. Вот и все. Чисто теоретический вопрос.
Re[4]: Разбудить поток
От:
Аноним
Дата:
18.12.03 07:04
Оценка:
Здравствуйте, adontz, Вы писали:
AS>>Какое это отношение имеет к вопросу? A>Такое что усыплать его через Sleep ИМХО не правильно
AS>>Плохую траву, видимо, покупаете. Срочно меняйте поставщика. Я вот обычно MSDN курю: AS>>
AS>>If bAlertable is TRUE and the thread that called this function is the same thread that called the extended I/O function (ReadFileEx or WriteFileEx), the function returns when either the time-out period has elapsed or when an I/O completion callback function occurs. If an I/O completion callback occurs, the I/O completion function is called. If an APC is queued to the thread (QueueUserAPC), the function returns when either the timer-out period has elapsed or when the APC function is called.
D>Да читал я эту вещь, вот токо при ответе на вопрос я именно подчеркнул, что надо продолжить выполнять именно туже самую функцию, а то что в поток можно засунуть вызов APC функции это понятно, да и к тому же может ему и не надо всякие оверлаппеды.Т.е. например разве можно сделать такое?
D>
D>Вот на команде слип он заснет, что надо вызвать что бы продолжить выполнение?
Плохо читали.
If an APC is queued to the thread (QueueUserAPC), the function returns when either the timer-out period has elapsed or when the APC function is called.
Буквально: В случае непустой очереди APC для треда, функция (SleepEx) возвращается либо по истечении периода тайм-аута, либо после вызова функции APC.
А>
А>Да ты, я вижу, "умен не по годам"... или мухоморов объелся. А>Да еще и колдовством, видимо, промышляешь — толи между строк читать научился, толи мыслишки чужие угадывать пытаешься. А>Я тебе напою пивом до поноса, если ты покажешь мне место, где _я_ сказал ту туфту, про эмуляцию механизмов синхронизации...
А>Просто мне пришла в голову совершенно нормальная мысль — если поток можно усыпить на неопределенное время, то, вероятно, должен быть метод вывести его оттуда. Вот и все. Чисто теоретический вопрос.
Хамить, наверное, не стоит? Тем более такую мысль нормальной назвать вряд ли можно. Все подобные вопросы разрешаются после элементарного чтения Рихтера.
Здравствуйте, Andrew S, Вы писали:
AS>Хамить, наверное, не стоит?
Демагогией заниматься, наверное, тоже
AS>Тем более такую мысль нормальной назвать вряд ли можно. Все подобные вопросы разрешаются после элементарного чтения Рихтера.
Здравствуйте, Andrew S, Вы писали:
AS>>>Плохую траву, видимо, покупаете. Срочно меняйте поставщика. Я вот обычно MSDN курю: AS>> AS>Плохо читали.
AS>
AS>If an APC is queued to the thread (QueueUserAPC), the function returns when either the timer-out period has elapsed or when the APC function is called.
AS>Буквально: В случае непустой очереди APC для треда, функция (SleepEx) возвращается либо по истечении периода тайм-аута, либо после вызова функции APC.
Это я тоже видел, просто не подумал что и через задницу можно зубы лечить. Хотя действительно все будет работать.
Здравствуйте, <Аноним>, Вы писали:
А>Делаю потоку А>
А>Sleep(INFINITE);
А>
А>Как его потом разбудить?
А ты весь процесс грохни
А ещё можно залезть в ядро и сказать, что бы оно твой процесс разбудило. Это же ЯДРО !
Ну многое, в принципе, можно придумать.
AS>>Тем более такую мысль нормальной назвать вряд ли можно. Все подобные вопросы разрешаются после элементарного чтения Рихтера.
А>Ответ в 2 строчки лично тебя сильно напряг?
Меня нет, но учитесь уважать мнения участников форума. Тем более спрашиваете Вы, а не у Вас. Успехов.
Здравствуйте, Аноним, Вы писали:
А>А нафик тогда этот слип ваще нужен?
Для полноты реализации. Константа INFINITE придумана не для Sleep а вообще для всех ждущих функций. В SendMessageTimeout она имеет смысл, а в Sleep наверное не имеет. К тому же явно говорится про окошки (и наверное любую обработку сообщений)
If you have a thread that uses Sleep with infinite delay, the system will deadlock.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Plutonia Experiment, Вы писали:
PE>>Вооще нужно спросить, для чего вообще вызывать Sleep(INFINITE)
А>А нахрена тогда ваще этот INFINITE придумали
Здравствуйте, Аноним, Вы писали:
А>Я тебе напою пивом до поноса, если ты покажешь мне место, где _я_ сказал ту туфту, про эмуляцию механизмов синхронизации...
Который из них ты ?
А>Просто мне пришла в голову совершенно нормальная мысль — если поток можно усыпить на неопределенное время, то, вероятно, должен быть метод вывести его оттуда. Вот и все. Чисто теоретический вопрос.
Так сразу и говорить нужно. Думаю тебе уже нормально объяснили.
Re[10]: Разбудить поток
От:
Аноним
Дата:
18.12.03 08:22
Оценка:
Здравствуйте, Andrew S, Вы писали:
AS>Хамить, наверное, не стоит? Тем более такую мысль нормальной назвать вряд ли можно.
Логика железная Если ты знаешь что так-то так-то сделать нельзя, а другой этого не знает и захотел спросить об этом, то его мысли, естесственно, не нормальные!
Мы ваще крутые хакеры ВинАПИ и с кем попало общаться не хотим, нам только занчки экспертов подавай
Здравствуйте, Аноним, Вы писали:
AS>>>Какое это отношение имеет к вопросу? A>>Такое что усыплать его через Sleep ИМХО не правильно
А>А нафик тогда этот слип ваще нужен?
Слип, как ты выразился, нужен для того, что бы поток не жрал время процессорное, если он ему не критично.
Вот Sleep(INFINITE) — это тоже интересный момент. Тебе то он понадоился зачем то.
Re[12]: Разбудить поток
От:
Аноним
Дата:
18.12.03 08:24
Оценка:
Здравствуйте, Andrew S, Вы писали:
А>>Ответ в 2 строчки лично тебя сильно напряг?
AS>Меня нет, но учитесь уважать мнения участников форума. Тем более спрашиваете Вы, а не у Вас. Успехов.
В чем выразилось мое неуважение? Если я задал такой глупый вопрос, что ответ на него опорочит чью-либо хакерское имя, то как минимум, на этот впрос можно не отвечать. А вот демагогию разводить нистоит ни в каким случаях!
AS>>Меня нет, но учитесь уважать мнения участников форума. Тем более спрашиваете Вы, а не у Вас. Успехов.
А>В чем выразилось мое неуважение? Если я задал такой глупый вопрос, что ответ на него опорочит чью-либо хакерское имя, то как минимум, на этот впрос можно не отвечать. А вот демагогию разводить нистоит ни в каким случаях!
1. Извиняюсь перед модератором за флейм. Это будет последнее неконструктивное сообщение от меня в этой ветке
2. Если вы подобную фразу >>Да ты, я вижу, "умен не по годам"... или мухоморов объелся. >>Да еще и колдовством, видимо, промышляешь — толи между строк читать научился, толи мыслишки чужие угадывать пытаешься. >>Я тебе напою пивом до поноса, если ты покажешь мне место, где _я_ сказал ту туфту, про эмуляцию механизмов синхронизации...
считаете проявлением крайнего уважения к собеседнику, тогда я опускаю лапки.
3. От себя лишь оставлю предложение каким-то образом промодерировать ветку, убрав это и ему подобные сообщения (в т.ч. и мои), дабы не засорять эмоциями ответы по тематике.
Успехов.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Andrew S, Вы писали:
AS>>Хамить, наверное, не стоит? Тем более такую мысль нормальной назвать вряд ли можно.
А>Логика железная Если ты знаешь что так-то так-то сделать нельзя, а другой этого не знает и захотел спросить об этом, то его мысли, естесственно, не нормальные! А>Мы ваще крутые хакеры ВинАПИ и с кем попало общаться не хотим, нам только занчки экспертов подавай
Да нет, все сильно. Всю кашу с мухоморами, колдовством и длинной пипиской ты сам заварил.
Здравствуйте, Аноним, Вы писали:
А>В чем выразилось мое неуважение? Если я задал такой глупый вопрос, что ответ на него опорочит чью-либо хакерское имя, то как минимум, на этот впрос можно не отвечать. А вот демагогию разводить нистоит ни в каким случаях!
Твое неуважение аккурат в том, что ты не удосужился сформулировать вопрос, а потом еще и наезд учинить — а хули вы не поняли меня нихрена ?
Re[14]: Разбудить поток
От:
Аноним
Дата:
18.12.03 08:39
Оценка:
Здравствуйте, Andrew S, Вы писали:
AS>1. Извиняюсь перед модератором за флейм. Это будет последнее неконструктивное сообщение от меня в этой ветке AS>2. Если вы подобную фразу >>>Да ты, я вижу, "умен не по годам"... или мухоморов объелся. >>>Да еще и колдовством, видимо, промышляешь — толи между строк читать научился, толи мыслишки чужие угадывать пытаешься. >>>Я тебе напою пивом до поноса, если ты покажешь мне место, где _я_ сказал ту туфту, про эмуляцию механизмов синхронизации... AS>считаете проявлением крайнего уважения к собеседнику, тогда я опускаю лапки.
Хамством отвечаю исключительно на хамство и демагогию. Если бы язвительная шуточка Плутония (про эмуляцию синхронизации потоков) имела бы как основание _мое_ высказывание на счет надобности синхронизации потоков, я бы, наверное, тоже посмеялся. А стебаться с его глупостей... уж извольте — мы тоде кой-чего могем
Re[14]: Разбудить поток
От:
Аноним
Дата:
18.12.03 08:41
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Твое неуважение аккурат в том, что ты не удосужился сформулировать вопрос, а потом еще и наезд учинить — а хули вы не поняли меня нихрена ?
Ты считаешь, что мой вопрос плоъхо сформулирован? Доводы, извольте...
Я наезд не учинял. Я ответил тебе хамством на демагогию
Здравствуйте, Аноним, Вы писали:
А>Хамством отвечаю исключительно на хамство и демагогию. Если бы язвительная шуточка Плутония (про эмуляцию синхронизации потоков) имела бы как основание _мое_ высказывание на счет надобности синхронизации потоков, я бы, наверное, тоже посмеялся. А стебаться с его глупостей... уж извольте — мы тоде кой-чего могем
Здравствуйте, Аноним, Вы писали:
А>Ты считаешь, что мой вопрос плоъхо сформулирован? Доводы, извольте...
Делаю потоку
Sleep(INFINITE);
Как его потом разбудить?
Откуда следует, что вопрос, как ты утверждаешь, теоретический ? Тут скорее на практику похоже.
Re[16]: Разбудить поток
От:
Аноним
Дата:
18.12.03 08:59
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Здравствуйте, Аноним, Вы писали:
А>>Ты считаешь, что мой вопрос плоъхо сформулирован? Доводы, извольте...
PE>
PE>Делаю потоку
PE>Sleep(INFINITE);
PE>Как его потом разбудить?
PE>Откуда следует, что вопрос, как ты утверждаешь, теоретический ? Тут скорее на практику похоже.
Короче, надо заканчивать этот тупой спор. Один человек номально меня понял и ответит на мой вопрос. Мне этого достаточно.
Здравствуйте, Аноним, Вы писали:
А>Короче, надо заканчивать этот тупой спор. Один человек номально меня понял и ответит на мой вопрос. Мне этого достаточно.
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Здравствуйте, Аноним, Вы писали:
А>>Короче, надо заканчивать этот тупой спор. Один человек номально меня понял и ответит на мой вопрос. Мне этого достаточно.
PE>Не забудь ему оценку поставить
Здравствуйте, unip, Вы писали:
PE>>Здравствуйте, Аноним, Вы писали: А>>>Короче, надо заканчивать этот тупой спор. Один человек номально меня понял и ответит на мой вопрос. Мне этого достаточно. PE>>Не забудь ему оценку поставить U>Пжалста.