Форум проекта uCrouter


lucky,2006\02\10 12:04:36,2989 байт

Ответить

Форум

Ответ:

вот пример, который я исследовал.
были использованы кросплатформенные вызовы, но la6_thread_create ни что иное как макрос вызывающий pthread_create, суть проблемы в том, что _THREAD2 стартует, а _THREAD1 тут же останавливается. Но мне кажется искать причину и исправлять - овчинка выделки не стоит, glibc всё же слишком тяжелая для встраиваемых устройств.

// ***************************************************************************
// FUNCTION
// _THREAD
// PURPOSE
//
// PARAMETERS
// HLA6EVENT h_event --
// RESULT
// none
// ***************************************************************************
void _THREAD2(HLA6EVENT h_event)
{
printf(" >> thread 2
",

la6_event_set(h_event, TRUE,

printf(" thread 2 event set
",



while (TRUE)
{
la6_msleep(1,
}

printf(" << thread 2
",

la6_thread_exit(0,
}

// ***************************************************************************
// FUNCTION
// _THREAD
// PURPOSE
//
// PARAMETERS
// HLA6EVENT h_event --
// RESULT
// none
// ***************************************************************************
void _THREAD1(HLA6EVENT h_event)
{
HLA6EVENT h_evt,
LA6THREAD st_thread,

printf(" >> thread 1
",

la6_event_set(h_event, TRUE,


if ((h_evt = la6_event_create(FALSE, TRUE)) != NULL)
{
printf(" thread 1 create 1
",
if (la6_thread_create(&st_thread, LA6THRD_DEFAULTFLAGS,
(LA6THRD_ENTRY_POINT)_THREAD2, h_evt))
{
printf(" thread 1 create 2
",
printf(" thread created
",

if (la6_event_wait(h_evt, 10000))
{
printf(" event SIGNALED!!!!
",
}
}
printf(" thread 1 create 3
",

la6_event_destroy(h_evt,
}

while (TRUE)
{
la6_msleep(1,
}


printf(" << thread 1
",

la6_thread_exit(0,
}
// ***************************************************************************
// FUNCTION
// main
// PURPOSE
//
// PARAMETERS
// none
// RESULT
// none
// ***************************************************************************
int main(int i_argc, char * apsz_argv[])
{
HLA6EVENT h_evt,
LA6THREAD st_thread,

printf(" >> main
",

if ((h_evt = la6_event_create(FALSE, TRUE)) != NULL)
{
printf(" main create 1
",
if (la6_thread_create(&st_thread, LA6THRD_DEFAULTFLAGS,
(LA6THRD_ENTRY_POINT)_THREAD1, h_evt))
{
printf(" main create 2
",

if (la6_event_wait(h_evt, 10000))
{
printf(" event SIGNALED!!!!
",
}
}

printf(" main create 3
",

la6_event_destroy(h_evt,
}

la6_msleep(10000,

printf(" << main
",

return 0,
}

Зарегистрироваться Забыли пароль ? Наверх

Ответить

Имя:
Пароль:
Тема:
Собщение:
Введите число : 5245


ARM®и Thumb® зарегистрированные торговые марки ARM Limited.
Linux® зарегистрированная торговая марка Linus Torvalds.
µClinux и uClinux торговые марки Arcturus Networks Inc.