Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Как сделать прогу?


Автор: Apacho 21.6.2007, 14:12
Подскажите пожалуйста, как сделать программу, где кто-нибудь будет вводить что-нибудь(функция cin) и одновременно будет идти таймер. smile  

Автор: FiMa1 21.6.2007, 14:17
Это слишком абстрактная формулировка, уточни в чем проблема..?

Автор: Apacho 21.6.2007, 14:31
Я не знаю, как сделать чтобы несколько функций работало одновременно, а это просто пример.

Автор: casey 21.6.2007, 14:51
Многопоточность это называется, а сделать можно по-разному, смотря на чем пишешь, наиболее общий вариант - с помощью API-функции CreateThread (это если под Виндовз)

Автор: FiMa1 21.6.2007, 15:02
Меня тоже интересует этот вопрос. К сожалению, до сих пор не нашлось времени изучить API/многопоточность, есть ли еще способы заставить выполняться кусок кода "в фоне" по отношению к другому.

Автор: Apacho 21.6.2007, 15:04
Мне надо под Линух

Автор: DigitSphinx 21.6.2007, 15:51
FiMa1, Для винды , пишется функция :
DWORD WINAPI ThrProc(LPVOID lParam)
{
}
И вызывается с помощью CreateThread()
Самым простым примером может быть така прога
Код

#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
DWORD WINAPI th( LPVOID lParam ) 
{
    int a = *(int*)lParam;
    for (a; a > 0; a--)
        cout << "a = " << a << endl;
    return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int b = 20;
    HANDLE h = CreateThread(0, 0, &th, &b, 0, NULL);
    for (int i = 0; i < 20; i++)
        cout << " i = " << i << endl;
    _getch();
    return 0;
}

Запусти и посмотри что получится
Затем открой MSDN и почитай про функции
Код

CreateThread(); 
AfxBeginThread();
WaitForSingleObject();
WaitForMultipleObjects();
SuspendThread()

И т.д.

Автор: Apacho 21.6.2007, 16:10
А для Линукса есть что-нибудь?

Автор: DigitSphinx 21.6.2007, 16:13
Apacho, Линух пока в глаза не видел (срочно на курсы лек.без. !!!)   smile  smile  smile 

Автор: nickless 21.6.2007, 18:43
Цитата(Apacho @  21.6.2007,  13:12 Найти цитируемый пост)
где кто-нибудь будет вводить что-нибудь(функция cin) и одновременно будет идти таймер

Имхо наиболее простой способ под линукс - использовать QTimer из Qt smile , но будет зависимость от Qt, а вообще этот вопрос http://forum.vingrad.ru/forum/c-c++programming-under-Unix-Linux.html, поищи там примеры работы с потоками.

Автор: MAKCim 21.6.2007, 19:39
Код

void *thread_routine(void *args) {
    int file = open("data", O_CREAT | O_EXCL | O_WRONLY, 0666);
    if (file < 0)
        goto exit;
    int number = 0;
    for (; number < 1000000; ++number) 
        write(file, &number, sizeof(int));
    close(file);
exit:
    pthread_exit(NULL);
}

int main() {
    pthread_t thread;
    if (pthread_create(&thread, NULL, &thread_routine, NULL))
        return errno;
    int number;
    scanf("%d", &number);
    pthread_join(thread, NULL);
    return 0;
}

Автор: Apacho 23.6.2007, 14:22
Когда я пишу:

#include <pthread.h>
#include <stdio.h>
#include <iostream.h>

void* pil(void* asd)
{
cout << "HELLO";
return NULL;
}

int main()
{
pthread_t thr;
pthread_create(&thr,NULL,&pil,NULL);
pthread_join(thr,NULL);
return 0;
}

У меня выскакивает такая ошибка:

/tmp/ccLltmwf.o(.text+0x160): In function `main':
: undefined reference to `pthread_join'
collect2: ld returned 1 exit status


Вопрос: ПОЧЕМУ появляется ошибка?

Автор: MAKCim 23.6.2007, 14:26
Цитата(Apacho @  23.6.2007,  14:22 Найти цитируемый пост)
Вопрос: ПОЧЕМУ появляется ошибка?

потому что надо подключить библиотеку pthread
Код

gcc ... -lpthread

Автор: Apacho 30.6.2007, 09:38
Какие библиотеки надо подключить, чтобы заработала прога (где кто-нибудь будет вводить что-нибудь(функция cin) и одновременно будет идти таймер) которую написал MAKCim

Автор: MAKCim 30.6.2007, 09:43
Цитата(Apacho @  30.6.2007,  09:38 Найти цитируемый пост)
Какие библиотеки надо подключить, чтобы заработала прога (где кто-нибудь будет вводить что-нибудь(функция cin) и одновременно будет идти таймер) которую написал MAKCim 

1. Подключать -lpthread
2. cin - это не функция
3. У меня чтение идет через scanf()
4. Что значит будет идти таймер?

Автор: Apacho 30.6.2007, 10:55
Я имею ввиду какие библиотеки #include надо подключать?

Автор: MAKCim 30.6.2007, 11:42
Код

#include <sys/types.h>
#Include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <stdio.h>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)