быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||||||||||||||||||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||||||||||||||||||||||
Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу)27.12.2011, 10:51. Показов 17236. Ответов 77
Метки нет (Все метки)
Да, как?
Меж тем других версия g++, в частности, 4.5.0, pthread_t был определён так:
ПОлучение TID потока, сводилось таким обраом, к:
Добавлено через 17 часов 32 минуты niXman, я сделал так, открыл \i686-pc-mingw32\include, заккоментил
ВЫвод:
0
|
27.12.2011, 10:51 | |
Ответы с готовыми решениями:
77
Как узнать, что поток закончился (библиотека pthread)? Компилятор не видит библиотеку pthread Приоритет потока (pthread) библиотека pthread.h в Code::Blocks |
0 / 0 / 0
Регистрация: 21.07.2015
Сообщений: 4
|
|
21.07.2015, 17:02 | 62 |
У меня в голове полная каша. Не понимаю, зачем тогда нужен MinGW, если такая базовая вещь как треды не работает. Можно же сделать для винды posix api, обернув это все в winapi - пишем pthread_create(), а внутри CreateThread(). А здесь какая-то реализация своя и еще не работающая. В чем смысл?
И чтобы два раза не вставать. Это зачем они так пишут: pthread_create(&drawer, nil, (void *(*)(void *)) drawProgress, &arg); ведь исправно работает &drawProgress, может, какие-то исторические причины и раньше нельзя было так? и как читать такую конструкцию (void *(*)(void *)) drawProgress ? Спасибо!
0
|
18842 / 9841 / 2409
Регистрация: 30.01.2014
Сообщений: 17,284
|
||||||||||||||||
21.07.2015, 20:06 | 64 | |||||||||||||||
Это так пишут для С++, т.к. там более строгая типизация. В С работает без явного приведения (но приведение все равно есть - только неявное!)
Это приведение типа указателя на функцию. Прототип для коллбэка, который принимает pthread_create такой -
winpthread вообще. никакого. отношения. к mingw не имеет. Это сторонняя библиотека, которую, некоторые мейнтейнеры изволят включать в свою сборку mingw. Это их личное дело. Делается это, чтобы получить большее количество *nix приложений, работающих под виндой. К слову, конструкция
Добавлено через 4 минуты Оно так и сделано. А кэнселить потоки все равно очень плохой стиль, вот видимо автор и не стал этим заморачиваться. В любом случае, она не входит в официальную поставку mingw. С офф. сайта:
2
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
21.07.2015, 21:42 [ТС] | 65 | |||||
Да ни в чём. Год назад отписался:
На этом всё. Если парни из pthread считают уникальность потока в пределах приложения более, чем достаточной- это их право. А вот интересно, как в линуксе идентифицируют потоки в пределах оси? ++++++++++++++++++++++++++++++++++++++++++++++ Поток должен самоубиваться pthread_exit(); ++++++++++++++++++++++++++++++++++++++++++++++ Что же касается pthread_cancel(), то она работает, но хитро. Убивающийся поток (в нашем случае вызывающий поток) должен быть к этому подготовлен вызовами функций pthread_setcancelstate() и pthread_setcanceltype (); Вот полностью код (кстати, необязательно создавать в твоём примере два потока, это вносит лишнюю путаницу):
1
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
21.07.2015, 21:58 | 66 |
В ядре поток и процесс - одна сущность. Но я не понимаю зачем идентифицировать потоки за пределами процесса? В пределах процесса - пожалуйста, а пределами зачем?
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
21.07.2015, 22:12 [ТС] | 67 |
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
21.07.2015, 22:16 | 68 |
kravam, житейский пример, если не сложно. Первое впечатление - это разрушает безопасноть.
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
21.07.2015, 22:26 [ТС] | 69 |
Естеесно, я собираюсь залезать своими толстыми пальцами в чужие приложения и не скрываю это. У меня вот, например в планах, копировать текст в окне, который часто меняется (стороннее web-приложение). Как скопировать его безошибочно? Вот, допустим, я вижу "Маня Ваня", хоп, программно посылаю окну нужные сообщения, потом читаю скопированный текст, а он "МаняВаня", без пробела. Каких-то моментов хватало, чтобы текст чуть-чуть изменился. Мне с ним как работать-то с искажённым текстом? А мне его программно нужно обрабатывать! Исходников приложения у меня нет. Остаётся один выход- замораживать все потоки того приложения, кроме оконного и посылать окну программно соответствующие сообщения. А чтобы заморозить их потоки, нужно знать их TIDы в пределах оси. Это я не сейчас такую задачу придумал, давно уже она у меня была, не знал просто, ка решить, не догадался, что потоки нужно убивать, а потом только текст копировать.
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
21.07.2015, 22:31 | 70 |
Т.е. дальнейшая работа приложения не предусмотрена? Вы же потоки убиваете, значит программа уже не работает корректно.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
21.07.2015, 22:33 [ТС] | 71 |
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
21.07.2015, 22:41 | 72 |
Понятно, pthread_kill, SIGSTOP/SIGCONT. Осталось только заставить целевую программу выполнять это по требованию. Это конечно же хак и не удивляйтесь что система не предоставляет подобных возможностей.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
21.07.2015, 22:53 [ТС] | 73 | |||||
Не стоит так драматизировать. Тривиальнейшая задача.
Кликните здесь для просмотра всего текста
Меня даже привлечь не могут к ответственности на этом форуме - если SuspendThread() есть, то для чего-то же она есть! Хотя, тут и за меньшее пытались наказать! Но пришёл строгий но справедливый супер-модератор и раздал всем сёстрам по серьгам.
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
21.07.2015, 23:04 | 74 |
Не по теме: Я вроде ничего не драматизировал Ну а данные Вы извлекаете из страниц или инициируете сброс в память.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
21.07.2015, 23:11 [ТС] | 75 |
Это вопрос был? Данные я извлекаю из окна. То есть посылаю ему программно сообщение а-ля Ctrl+A- это выделяется весь текст. Потом другое сообщение Ctrl+Insert- всё, текст в буфере обмена, а потом можно и потоки разморозить.
1
|
castorsky
|
21.07.2015, 23:14
#76
|
Не по теме: Да, забыл знак вопроса. Спасибо.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
21.07.2015, 23:20 [ТС] | 77 |
Но это не значит, что всё хорошо! Не забываем, что чтобы обработать сообщение, оконный поток должен работать. Но мы помним, что текст в окне перерисовывается часто. Если частота перерисовки зависит исключительно от главного потока, который, напоминаю, работает во время отправки сообщений и, возможно перерисовывает текст- тогда бесполезно копировать текст- всё равно будут ошибки. Если за обновление данных отвечают другие потоки (которые я замораживаю), тогда может получиться.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||||||
26.07.2015, 20:01 | 78 | |||||
я не понимаю о чем плачь, но если очень хочется..
https://code.google.com/p/libp... 9dea2a63c4
под pthread_t на самом деле кроется arch_thread_info, в котором есть член handle. из него можно уже получить TID через GetThreadId какой в этом смысл, зм?
0
|
26.07.2015, 20:01 | |
26.07.2015, 20:01 | |
Помогаю со студенческими работами здесь
78
Pthread функция потока внутри класса Изолирование данных родительского потока от дочернего в pthread Параллельное программирование, библиотека pthread. Объединение, пересечение, разность множеств A, B, C Как получить ответ на открытый порт UDP как получить дескриптор файла, открытый функцией fopen Как можно программно открыть ссылку и получить в окне броузера открытый файл? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |