⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread.cpp

📁 LINUX下的混音软件
💻 CPP
字号:
// -*- c-basic-offset: 4 -*-// -*- c-file-style:  "bsd" -*-// This does some rather shoddy tests on a small selection of core classes.#include "Lock.h"#include "Composition.h"#include "Segment.h"#include "Event.h"#include <cstdio>#include <sys/times.h>#include <iostream>#include <pthread.h>#include <unistd.h>using namespace std;using namespace Rosegarden;static void*writer_thread1(void *arg){    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);    cout << "write_thread1 - init" << endl;    Rosegarden::Composition *comp =         static_cast<Rosegarden::Composition*>(arg);    Rosegarden::Composition::segmentcontainer segs = comp->getSegments();    Rosegarden::Composition::segmentcontainer::iterator it = segs.begin();    Rosegarden::Segment *segment = *it;    Rosegarden::timeT insertTime = 50000;    while (true)    {        usleep(90000);        cout << "LENGTH = " << comp->getNbBars() << endl;        segment->insert(new Event(Note::EventType, insertTime));        insertTime += 96;    }}static void*write_thread2(void *arg){    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);    cout << "write_thread2 - init" << endl;    Rosegarden::Composition *comp =         static_cast<Rosegarden::Composition*>(arg);    Rosegarden::Composition::segmentcontainer segs = comp->getSegments();    Rosegarden::Composition::segmentcontainer::iterator it = segs.begin();    Rosegarden::Segment *segment = *it;    Rosegarden::timeT insertTime = 0;    while (true)    {        usleep(50);        cout << "LENGTH = " << comp->getNbBars() << endl;        segment->insert(new Event(Note::EventType, insertTime));        insertTime += 96;    }}intmain(int argc, char **argv){    clock_t st, et;    struct tms spare;    cout << "Threading test" << endl;    pthread_t thread1;    pthread_t thread2;    Rosegarden::Composition comp;    Rosegarden::Segment segment;    comp.addSegment(&segment);    if (pthread_create(&thread1, 0, writer_thread1, &comp))    {        cerr << "Couldn't start thread 1" << endl;        exit(1);    }    pthread_detach(thread1);    if (pthread_create(&thread2, 0, write_thread2, &comp))    {        cerr << "Couldn't start thread 2" << endl;        exit(1);    }    pthread_detach(thread2);    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);    static Lock lock;    if (lock.getWriteLock(1))    {        cout << "got write lock" << endl;    }    if (lock.getWriteLock(0))    {        cout << "got second write lock" << endl;    }    else    {        cout << "couldn't get second write lock" << endl;    }    Rosegarden::timeT insertTime = 0;    while(true)    {        usleep(50000);        cout << "Inserting Event at time " << insertTime << endl;        segment.insert(new Event(Note::EventType, insertTime));        insertTime += 96;    }};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -