45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
1

Posix поток

08.09.2015, 16:32. Показов 890. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем сделал такую программу, используя поток, которая просто выводит сообщения, скомпилировал как надо:
gcc Programm.c -lpthread .
Вот код :
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <pthread.h>
void potok1(void *a)
{
    int i;
    for(i = 0; i<5; i++) {
        sleep(1);
        puts("Proverka");
    }
    return NULL;
}
int main()
{
    pthread_t t1;
    pthread_create(&t1, NULL, potok1, NULL);
    void* result;
    pthread(t1, &result);
    return 0;
}
Ошибки выдаёт в к функциям pthread_create и return NULL.
Одна из ошибок:
Programm.c : In function 'main':
Programm.c:17:3 : warning : passing argument 3 of 'pthread_create' from incompatible pointer type.
Вот как то так. Но! Я понятия не имею что за прикол, но ранее, а именно вчера данный код скомпилировался и запустился, я сегодня уже нет, может с линуксом(у меня кноппикс) что то?

Заранее благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2015, 16:32
Ответы с готовыми решениями:

Очередь сообщений posix
как известно для создания новой очереди сообщений существует вызов mq_open(qmd_t...

Потоки Posix. C Linux
Пишу программу. При компиляции ошибок нет. Когда пытаюсь выполнить выдает ошибку : &quot;Ошибка...

Неименованные каналы POSIX
Всем привет, делаю лабу по операционным системам. Не понимаю один момент. Задание: Родительский...

Обход каталога в POSIX
не работает код, в чем ошибка может быть, помогите разобраться, в с под линукс только начинаю...

15
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
08.09.2015, 16:43 2
Cудя по ману pthread_create, она принимает указатель на функцию, которая возвращает void*, а не void.
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
08.09.2015, 16:46  [ТС] 3
Velesthau, Дело в том что с таким кодом оно уже компилировалось.
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
08.09.2015, 16:48 4
Цитата Сообщение от IVAN1234 Посмотреть сообщение
Velesthau, Дело в том что с таким кодом оно уже компилировалось.
Никто не сможет проверить, что у тебя компилировалось, а что не компилировалось, и в каком состоянии ты компилировал программу.
Оно и сейчас компилироваться будет, потому что у тебя не ошибка, а warning. Но по факту в мане функция должна возвращаться void*.
Почему, как и что было раньше - выясни сам.
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
08.09.2015, 16:56  [ТС] 5
Забыл кинуть ещё кое что, вылетает при компиляции --
In file included from Programm.c:1:0
/usr/include/pthread.h:244:12:note:expected 'void *(*)(void *)' but argument is type 'void(*)(void *)'
extern int pthread_create(pthread_t* _restrict _newthread,
Может это что то прояснит.
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
08.09.2015, 17:12 6
Цитата Сообщение от IVAN1234 Посмотреть сообщение
/usr/include/pthread.h:244:12:note:expected 'void *(*)(void *)' but argument is type 'void(*)(void *)'
extern int pthread_create(pthread_t* _restrict _newthread,
Может это что то прояснит.
Прояснять ту нечего. Это все то же, что я уже написал выше. Что не понятно-то?
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
08.09.2015, 17:13  [ТС] 7
Velesthau, Я не только вам написал, мало ли, вдруг у кого то такая проблема была, может помогут.
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
08.09.2015, 17:18 8
Цитата Сообщение от IVAN1234 Посмотреть сообщение
Velesthau, Я не только вам написал, мало ли, вдруг у кого то такая проблема была, может помогут.
Уже написал, как решается проблема не один раз. И компилятор тоже написал тебе это черным по белому:
Цитата Сообщение от Velesthau Посмотреть сообщение
expected 'void *(*)(void *)' but argument is type 'void(*)(void *)'
Хочу, говорит, указатель на функцию, которая принимает указатель на void и возвращает указатель на void, а мне автора кода подсунул какую-то левую фигню.

В чем нужна помощь?
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
08.09.2015, 17:22  [ТС] 9
Velesthau, В решении проблемы.
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
08.09.2015, 17:23 10
Что не понятно в представленном решении?
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
08.09.2015, 17:24  [ТС] 11
Velesthau, "Почему, как и что было раньше - выясни сам." вы про это?
0
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
08.09.2015, 17:32 12
Цитата Сообщение от IVAN1234 Посмотреть сообщение
"Почему, как и что было раньше - выясни сам." вы про это?
А, так это главный вопрос: почему код вчера компилировался, а сегодня нет? Ну-ну, жди.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
08.09.2015, 18:03 13
Цитата Сообщение от Velesthau Посмотреть сообщение
Cудя по ману pthread_create, она принимает указатель на функцию, которая возвращает void*, а не void.
IVAN1234, ну не верите человеку - возьмите, да сами почитайте man pthread_create там, кстати, и пример есть. А что, как и с какого перепуга у Вас вчера компилировалось, а сегодня вдруг ошибки пишет - поди теперь угадай...

Добавлено через 2 минуты
Цитата Сообщение от IVAN1234 Посмотреть сообщение
pthread(t1, &result);
Вот это к примеру вообще что значит?
0
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
08.09.2015, 18:05  [ТС] 14
easybudda, вместо pthread ставил join_pthread, ошибся, сдесь, но компилировал с join_pthread.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
08.09.2015, 19:09 15
Цитата Сообщение от IVAN1234 Посмотреть сообщение
компилировал с join_pthread
В смысле - с pthread_join()

Вот пример попроще
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
 
struct THREAD_PARAMS {
    const char * msg;
    int repeat;
    unsigned delay;
};
 
void * thread_func(void * p) {
    struct THREAD_PARAMS * tp = p;
    int i;
    
    for ( i = 0; i < tp->repeat; ++i ) {
        printf("%s\n", tp->msg);
        sleep(tp->delay);
    }
    
    return NULL;
}
 
int main(void) {
    struct THREAD_PARAMS tp = { "Welcome to threads", 3, 1 };
    pthread_t thread;
    
    if ( pthread_create(&thread, NULL, thread_func, &tp) ) {
        perror("pthread");
        exit(EXIT_FAILURE);
    }
    
    if ( pthread_join(thread, NULL) ) {
        perror("pthread_join");
        exit(EXIT_FAILURE);
    }
    
    exit(EXIT_SUCCESS);
}
Работает, не ругается
Код
[andrew@andrew system]$ gcc -Wall -pedantic -ansi pthread_example.c -lpthread
[andrew@andrew system]$ ./a.out 
Welcome to threads
Welcome to threads
Welcome to threads
[andrew@andrew system]$
1
castorsky
08.09.2015, 22:13     Posix поток
  #16

Не по теме:

Рано еще потоки. Надо K&R шлифовать если такие элементарные вещи вызывают непонимание.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2015, 22:13

Генератор сигнала на C под POSIX
Добрый день уважаемые форумчане! Нужна ваша помощь... Сначала небольшая предыстория: С++ у нас вели...

Точный delay() , желательно только POSIX
Сразу говорю: &quot;Я знаю о вытесняющей многозадачности и то, что freebsd/linux не realtime OS!&quot; ...

Изменить размер у POSIX shared memory сегмента
Подскажите, пожалуйста, как изменить размер уже выделенного сегмента разделяемой памяти? Вот так...

Интерпретация командной строки. Файловые операции POSIX. Прошу помочь дописать программу
Стоит такое задание: Написать программу, которая обеспечивает работу команды вида : , где -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru