Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2008 12:39:34

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

С-расширения и SWIG. С-функция не хочет делиться.

Здравствуйте
Решил попробовать написать С-расширение при помощи 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);
}
}
Файл: potok.i
%module potok
%include potok.c
Далее:
swig -python potok.i
И наконец компилирую и связываю:
gcc -shared potok.c potok_wrap.c -o _potokmodule.so -I/usr/include/python2.5 -DHAVE_CONFIG -I/usr/lib/python2.5/config

Запускаю python:
>>> import potok
>>> potok.pusk()
СиПоток
СиПоток
СиПоток

0
поток завершен
СиПроцесс
СиПроцесс
СиПроцесс
>>>
То есть - все нормально, все работает.

Пробую разбить функцию void pusk() на составляющие - void start(), void finish, void pusk()
 /* 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);
}
}
Пытаюсь собрать( все как выше делал):
~> gcc -shared Npotok.c Npotok_wrap.c -o _Npotokmodule.so -I/usr/include/python2.5 -DHAVE_CONFIG -I/usr/lib/python2.5/config

Выдает:
Npotok_wrap.c: In function ‘potok_id_set’:
Npotok_wrap.c:2494: error: ‘potok_id’ undeclared (first use in this function)
Npotok_wrap.c:2494: error: (Each undeclared identifier is reported only once
Npotok_wrap.c:2494: error: for each function it appears in.)
Npotok_wrap.c: In function ‘potok_id_get’:
Npotok_wrap.c:2506: error: ‘potok_id’ undeclared (first use in this function


Почему ? Что ей надо ? Может кто-нибудь подобное делал ? ( под Windows может быть?)


Заранее спасибо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version