0 / 0 / 0
Регистрация: 27.06.2016
Сообщений: 4
1

Синхронизация потоков Event c++

23.12.2016, 18:23. Показов 4203. Ответов 4

Необходимо, чтобы нить t4 ждала события просчета времени "time = 1000 * (getTime() - time);" и после этого запускалась. Как реализовать? Нужен именно Event (такое задание)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Get start time
long time = getTime();
 
// Thread procession
thread t1(process, filenames, 0);
thread t2(process, filenames, 1);
thread t3(process, filenames, 2);
thread t4(foutput, "Time total", "", time);
 
// Join
t1.join();
t2.join();
t3.join();
 
// Get total time
// Здесь должен быть Event
time = 1000 * (getTime() - time);
 
// Здесь должна сработать нить t4 
t4.join();
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2016, 18:23
Ответы с готовыми решениями:

Синхронизация потоков
Есть статический класс к которому я хочу обращаться из разных потоков static class MyLog {...

Синхронизация потоков
На собеседовании поставили такую задачу: есть 3 потока, в каждом из которых вызывается функция, в...

Синхронизация потоков в c++
Совершенно не понятно что не так и как правильно. Задача: Отсортировать массив целых чисел....

синхронизация потоков
проблема в следующем: есть 2 потока один считает некоторую сумму в цикле по столбцам матрицы...

4
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
24.12.2016, 08:07 2
Цитата Сообщение от dashbog Посмотреть сообщение
16 // Здесь должен быть Event
Именно здеь? А не в 18 строке?
0
0 / 0 / 0
Регистрация: 27.06.2016
Сообщений: 4
24.12.2016, 09:46  [ТС] 3
Да, в 18
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
24.12.2016, 11:05 4
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
40
41
42
43
44
condition_variable cv;
std::mutex mut;
 
void process(string filename, int n)
{
 
}
 
void foutput(const char* foutput, const char* str, double& time)
{
    unique_lock <std::mutex> ul(mut);
    cv.wait(ul, [&] {return time != 0.0;});
    cout << foutput << ' ' << time << str << endl;
}
 
int main()
{
    double time_total = 0.0;
    clock_t time1 = clock();
 
    string filenames("filename.txt");
 
    thread t1(process, filenames, 0);
    thread t2(process, filenames, 1);
    thread t3(process, filenames, 2);
    thread t4(foutput, "Time total", "", ref(time_total));
 
    // Join
    t1.join();
    t2.join();
    t3.join();
 
    this_thread::sleep_for(chrono::seconds(5)); // для демонстрации
    // Get total time
    clock_t time2 = clock();
    {
        lock_guard<std::mutex> m(mut);
        time_total = (time2 - time1 + .0) / CLOCKS_PER_SEC;
    }
    // Здесь должен быть Event
    cv.notify_one();
    // Здесь должна сработать нить t4
    t4.join();
}
0
0 / 0 / 0
Регистрация: 27.06.2016
Сообщений: 4
24.12.2016, 11:16  [ТС] 5
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2016, 11:16
Помогаю со студенческими работами здесь

Синхронизация потоков
Снова привет. Есть у меня код, который требуется раскидать на потоки. Ниже код: #include...

Синхронизация потоков
Добрый день. Как синхронизировать потоки, чтобы вывод в stdout был поочередным: foo bar foo bar?...

Синхронизация потоков - C++
Что это? Как это исправить? &quot;ConsoleApplication2.exe&quot; (Win32). Загружено...

Буферы и синхронизация потоков
Всем привет. Суть такова: есть(будет) некая софтина которая подгружает плагины(дмнамические...


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

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

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