Господа программисты помогите плиз разобраться с многопоточным программированием под линукс(у меня slackware 8.1)
компилятор находит pthread.h
а вот pthread_create(...) уже не узнает
вообщем следующий код не компилируется.
#include <pthread.h>
void* f(void*){
}
void main(){
void* arg;
pthread_t th;
pthread_create(&th,NULL,f,arg);
}
Здравствуйте, arsenal, Вы писали:
A>Господа программисты помогите плиз разобраться с многопоточным программированием под линукс
A>вообщем следующий код не компилируется.
[skip]
Банальный вопрос — библиотека pthread подключена(ключ линковщика -lpthread)?
Если да, давай логи компиляции.
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
Re[2]: pthread
От:
Аноним
Дата:
03.04.03 07:58
Оценка:
Кому банальный, а иной начинающий программер
будет неделю сидеть и не разберется!
WE>Банальный вопрос — библиотека pthread подключена(ключ линковщика -lpthread)? WE>Если да, давай логи компиляции.
void* f(void*){
cout<<"Trace1"<<endl; //этот cout проходит
window W;
w.init(0,10,20,30,"Title");
cout<<"Trace2"<<endl;//а вот этот cout уже не выполняется
Здравствуйте, arsenal, Вы писали:
A>спасибочки совсем забыл про опцию lpthread A>теперь другая проблема :следующий код компилится но thread не выполняется до конца.
A>#include <pthread.h> A>#include <iostream.h> A>#include <LEDA/window.h>
A>void* f(void*){ A> cout<<"Trace1"<<endl; //этот cout проходит A> window W; A> w.init(0,10,20,30,"Title"); A> cout<<"Trace2"<<endl;//а вот этот cout уже не выполняется
A>}; A> void main(){ A> pthread_t th; A> void* arg; A> pthread_create(&th,NULL,f,arg); A>}
А ты думал? У тебя родитель завершается и дитё за ним следом дохнет. Чтобы не оставлять дитё сиротой, юзай pthread_join(th, NULL) последней строчкой в main.
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
спасибочки.вызвал pthread_join все заработало только снова ни так как хотелось бы. Не могу получить два одновременно отображающихся окна. то segemntation core выскакивает а то xlib:unexpected async reply(sequence 0xe2)
Здравствуйте, arsenal, Вы писали:
A>спасибочки.вызвал pthread_join все заработало только снова ни так как хотелось бы. Не могу получить два одновременно отображающихся окна. то segemntation core выскакивает а то xlib:unexpected async reply(sequence 0xe2)
unexpected async reply обозначает, что XLib не проинициализирована для работы с потоками. Вызови в начале main
функцию XInitThreads(), должно спасти.
А ты в курсе, справа вверху сообщения кнопочки такие с оценочками...
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
Здравствуйте, arsenal, Вы писали:
A>вызываю XInitThreads(); A>компилятор ругается на эту функцию может какой-нибудь еще заголовочный файл нужно подключить кроме pthread.h A>за ранее спасибо
Хедер — <X11/Xlib.h>
Сама либа -lX11
Странно, что твоя LEDA эти вещи сама не подцепила.
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
спасибочки в очередной раз только вот опять что-то нитак следующий код выбрасывает segementation fault
#include <pthread.h>
#include <iostream.h>
#include <LEDA/window.h>
#include <X11/Xlib.h>
#define NUMBER_THREADS 5
void* f(void* arg){
cout<<"Function has been worked!!!"<<endl;
window W(300,300,"Title");
int exit_but = W.button("Exit",111);
W.display(window::center,window::center);
while(1){
int k ;
double x, y;
int event = W.read_event(k, x, y);
if ( k == exit_but){
W.close();
break;
}
}
cout<<"Pthread has been finished!!!"<<endl;
cout<<"------------------------------------"<<endl;
segmentation fault невсегда выпадает и еще влияние оказывает while(1){...}внутри потока без него вроде segmentation не вылетает.Да и еще а можно какой примерчик с потоками или ссылочку на руководство по потокам. Буду рад любым ответам советам и ссылкам.
заранее спасибо
Здравствуйте, arsenal, Вы писали:
A>segmentation fault невсегда выпадает и еще влияние оказывает while(1){...}внутри потока без него вроде segmentation не вылетает.Да и еще а можно какой примерчик с потоками или ссылочку на руководство по потокам. Буду рад любым ответам советам и ссылкам. A>заранее спасибо
Меня в твоём коде сильно смутил этот фрагмент:
int k ;
double x, y;
int event = W.read_event(k, x, y);
Нахрена передавать в функцию по значению неинициализированные переменные, да ещё сразу 3?
Есть надежда, что дело в этом.
Насчёт thread-safe — читай документацию к библиотеке, некоторые библиотеки не задумывались для работы с многопоточностью, и для таких segfault — обычное дело.
Насчёт tutorial ничего не подскажу, сам в своё время по man и форумам разбирался.
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
Здравствуйте, White Eagle, Вы писали:
WE>Здравствуйте, arsenal, Вы писали:
A>>segmentation fault невсегда выпадает и еще влияние оказывает while(1){...}внутри потока без него вроде segmentation не вылетает.Да и еще а можно какой примерчик с потоками или ссылочку на руководство по потокам. Буду рад любым ответам советам и ссылкам. A>>заранее спасибо
WE>Меня в твоём коде сильно смутил этот фрагмент: WE>
WE>Нахрена передавать в функцию по значению неинициализированные переменные, да ещё сразу 3? WE>Есть надежда, что дело в этом.
WE>Насчёт thread-safe — читай документацию к библиотеке, некоторые библиотеки не задумывались для работы с многопоточностью, и для таких segfault — обычное дело.
WE>Насчёт tutorial ничего не подскажу, сам в своё время по man и форумам разбирался.
Что касается 3 непроинициализированных переменных то все они являются выходными параметрами
Здравствуйте, arsenal, Вы писали:
A>Что касается 3 непроинициализированных переменных то все они являются выходными параметрами
Ага, уже понял, это С++ оказывается.
Тогда, боюсь, беда
Никогда не делайте ничего правильно с первого раза, иначе никто потом не оценит, как это было сложно.
Re[12]: pthread
От:
Аноним
Дата:
04.04.03 13:56
Оценка:
Здравствуйте, White Eagle, Вы писали:
WE>Здравствуйте, arsenal, Вы писали:
A>>Что касается 3 непроинициализированных переменных то все они являются выходными параметрами
WE>Ага, уже понял, это С++ оказывается. WE>Тогда, боюсь, беда
да кстати немного покапался и обнаружил, что существуют специальные xthread в (Xthreads.h) может в этом все дело?