Форум сайта python.su
Здравствуйте
Решил попробовать написать С-расширение при помощи SWIG. ( у меня openSUSE 10.3)
Оговорюсь сразу: helloSWIG.c и potok.c мне удалось собрать.
potok.c: Что делает - запускается с -поток , 3 раза печатает си-поток( с интервалом в 1 секунду), затем поток завершается, запускается с-процесс, 3 раза печатается си-процесс, процесс завершается.
Файл: potok.c
/* potok.c */
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
pthread_t potok_id;
void * mypotok()
{
while (1) { fprintf(stderr,"СиПоток\n"); sleep(1); }
}
void pusk() {
pthread_create(&potok_id,NULL,&mypotok,NULL);
sleep(3);
pthread_cancel(potok_id);
if( !pthread_equal( pthread_self(),potok_id ) )
{
printf("\n%d\n", pthread_equal( pthread_self(), potok_id ));
fprintf(stderr,"поток завершен\n");
pthread_join(potok_id,NULL);
}
int i;
for (i=0; i<3; i++) {
fprintf(stderr,"СиПроцесс\n"); sleep(1);
}
}
%module potok
%include potok.c
>>> import potok
>>> potok.pusk()
СиПоток
СиПоток
СиПоток
0
поток завершен
СиПроцесс
СиПроцесс
СиПроцесс
>>>
/* Npotok.c */
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
pthread_t potok_id ; /* идентификатор потока */
void * mypotok()
{
while (1) { fprintf(stderr,"СиПоток\n"); sleep(1); }
}
void start()
{
pthread_create(&potok_id,NULL,&mypotok,NULL);
}
void finish()
{
pthread_cancel(potok_id);
if( !pthread_equal( pthread_self(),potok_id ) )
{
printf("\n%d\n", pthread_equal( pthread_self(), potok_id ));
fprintf(stderr,"поток завершен\n");
pthread_join(potok_id,NULL);
}
}
void pusk()
{
start();
sleep (3);
finish();
int i;
for (i=0; i<3; i++) {
fprintf(stderr,"СиПроцесс\n"); sleep(1);
}
}
Офлайн