Hat jemand CUDA 7.5 unter Ubuntu 14.04.3 LTS x86_64 erfolgreich installiert?

12

Meine Workstation hat zwei Grafikprozessoren (Quadro K5200 und Quadro K2200) mit dem neuesten NVIDIA-Treiber (Version: 352.41). Nachdem ich die Datei cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb von CUDA 7.5 Downloads heruntergeladen habe, versuche ich sie zu installieren, aber es ergibt sich folgendes Ergebnis :

root@P700-Bruce:/home/bruce/Downloads# sudo apt-get install cuda
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 cuda : Depends: cuda-7-5 (= 7.5-18) but it is not going to be installed
 unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                        Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

Ich habe die Lösung versucht:

  1. sudo apt-get remove nvidia-cuda-* # entfernen alte nvidia-cuda Pakete
  2. Installieren Sie nicht erfüllte Abhängigkeiten:

    root@P700-Bruce:/home/bruce/Downloads# apt-get install cuda-7-5
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:
    
    The following packages have unmet dependencies:
     cuda-7-5 : Depends: cuda-toolkit-7-5 (= 7.5-18) but it is not going to be installed
                Depends: cuda-runtime-7-5 (= 7.5-18) but it is not going to be installed
     unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                            Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
    E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
    
    root@P700-Bruce:/home/bruce/Downloads# apt-get install cuda-toolkit-7-5
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:
    
    The following packages have unmet dependencies:
     cuda-toolkit-7-5 : Depends: cuda-core-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-command-line-tools-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-samples-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-documentation-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-visual-tools-7-5 (= 7.5-18) but it is not going to be installed
     unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                            Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
    E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
    
  3. Installieren und verwenden Sie aptitude

Mein Ubuntu14.04-Betriebssystem wurde gerade installiert und hat die Software aktualisiert und den neuesten Nvidia-Treiber installiert.

Können Sie etwas Hilfe geben? Vielen Dank im Voraus!

    
Bruce Yo 09.09.2015, 11:58
quelle

10 Antworten

1

Ich habe Ubuntu heute neu gestartet und festgestellt, dass dort eine weitere nicht erfüllte Abhängigkeit ist, wie libcog15 : Depends: mesa-driver... (ich kann mich nicht an den vollständigen Paketnamen erinnern), also habe ich apt-get install benutzt, um den "mesa-driver" zu installieren. Danach wurde CUDA 7.5 erfolgreich installiert.

Beachten Sie, dass meine Kernel-Version 3.19.0-28-generic ist und die gcc-Version Ubuntu 4.8.4-2ubuntu1 ~ 14.04 ist, die bei Offizielle CUDA 7.5-Dokumente . Ich werde prüfen, ob es wirklich funktioniert.

    
Bruce Yo 10.09.2015, 03:50
quelle
8

Die Installation von CUDA ist ein bisschen schwierig. Ich habe die folgenden Schritte befolgt und es funktioniert für mich. Sie können sich darauf beziehen Link auch.

Bestätigung der Umgebung:

  1. lspci | grep -i nvidia (Bestätigen Sie, dass die Informationen der NVIDIA-Karte angezeigt werden)

  2. uname -m (stellen Sie sicher, dass es ein x86_64 ist)

  3. gcc --version (stellen Sie sicher, dass es installiert ist)

Installation von CUDA -

  1. Laden Sie die Datei cuda_7.5.18_linux.run von link

  2. herunter
  3. Führen Sie die folgenden Befehle aus:

    sudo apt-get install build-essential
    echo blacklist nouveau option nouveau modeset=0 |sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf 
    sudo update-initramfs -u
    
  4. Starten Sie den Computer neu

  5. Drücken Sie auf dem Anmeldebildschirm Strg + Alt + F1 und melden Sie sich bei Ihrem Benutzer an.

  6. Gehen Sie zu dem Verzeichnis, in dem Sie den CUDA-Treiber haben, und führen Sie

    aus
    chmod a+x .
    sudo service lightdm stop
    sudo bash cuda-7.5.18_linux.run --no-opengl-libs
    
  7. Während der Installation:

    • Akzeptieren Sie die EULA-Bedingungen
    • Sagen Sie JA, um den NVIDIA-Treiber zu installieren
    • Sagen Sie JA, um CUDA Toolkit + Driver
    • zu installieren
    • Sagen Sie JA, um CUDA-Beispiele zu installieren
    • Sagen Sie NEIN, alle Xserver-Konfigurationen mit Nvidia neu aufzubauen
  8. Überprüfen Sie, ob /dev/nvidia* Dateien vorhanden sind. Wenn dies nicht der Fall ist, machen Sie Folgendes:

    sudo modprobe nvidia
    
  9. Setze Umgebungspfadvariablen

    export PATH=/usr/local/cuda-7.5/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
    
  10. Überprüfen Sie die Treiberversion

    cat /proc/driver/nvidia/version'
    
  11. Überprüfen Sie die CUDA-Treiberversion

    nvcc –V
    
  12. Schalten Sie das Licht wieder ein

    sudo service lightdm start
    
  13. Strg + Alt + F7 und melden Sie sich über GUI am System an

  14. Erstellen Sie CUDA Samples, gehen Sie in den Ordner NVIDIA_CUDA-7.5_Samples bis zum Terminal und führen Sie folgenden Befehl aus:

    make
    cd bin/x86_64/linux/release/
    ./deviceQuery
    ./bandwidthTest
    

    Beide Tests sollten letztendlich einen 'PASS' im Terminal ausgeben

  15. Starten Sie das System neu

Avik 19.02.2016 05:38
quelle
2

Es gibt zwei Möglichkeiten, passenden CUDA-Treiber zu installieren (für Optimus und andere integrierte Grafik-Chipsätze auf Hybrid-Mainboards) - das erste hier beschriebene ist das einfachste und die zweite Beschreibung ist mühsamer, aber auch effektiver:

A)

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-355 nvidia-prime
sudo reboot

B)

Beschreibung der Methode B ist hier, aber schon älter (erklärt von Benutzer dschinn1001) - diese Methode B ist demütiger und kann riskant, aber nicht schädlich sein. :

Wie kann ich den Nvidia-Treiber GT 520 und Cuda 5.0 in Ubuntu 13.04 installieren?

Das Beta-Treiber-Paket für Nvidia zum Herunterladen für Linux ist hier:

Link

Methode A ist einfacher, aber nicht klar, wie es mit xscreensaver interagiert und Methode B ist älter, aber das Treiber-Paket wird auch in letzter Zeit aktualisiert, und nach Methode B sollte es besser mit xscreensaver konditioniert funktionieren Dieser xscreensaver ist installiert. (Ich habe Methode B am 13.10 getestet und das funktionierte sehr gut, sogar mit xscreensaver. Und ich denke, der Rest dieses Threads liegt an der Hardware.)

Zusätzlich und in Bezug auf Hummel mit Optimus-Grafikchipsätzen sind diese Anpassungen für Hummel auch notwendig:

So richten Sie nVidia Optimus / Bumblebee ein 14.04

    
dschinn1001 21.09.2015 21:19
quelle
1

Klingt wie lp bug 1428972 .

Benutzer fennytansy hat eine Problemumgehung in Kommentar # 10 :

sudo apt-get install libglew-dev libcheese7 libcheese-gtk23 libclutter-gst-2.0-0 libcogl15 libclutter-gtk-1.0-0 libclutter-1.0-0

    
user3813819 10.09.2015 01:37
quelle
1

Ich habe CUDA mit der Runfile-Methode erfolgreich installiert. Die Einrichtung ist etwas komplizierter, da Ihr primärer Grafiktreiber auch mithilfe der Runfile-Methode installiert werden muss ( Siehe hier ).

Versuchen Sie, nur Treiber zu installieren. Dies kann mithilfe der Runfile-Methode erfolgen. Es wird Sie für jeden Teil der Installation auffordern und Sie können die GL Bibliotheken und Toolkits deaktivieren. Das Unity Control Center hat mir auch Probleme gegeben, da das CUDA-Sample libGLU.so anstelle von libGL.so verwenden muss. Dies ist eine einfache Lösung beim Erstellen eigener Lernbeispiele.

    
asdf 15.09.2015 20:35
quelle
1

Versuchen Sie, den nvidia-Treiber zu deinstallieren und cuda direkt zu installieren. Auf einem frischen Ubuntu 14.04 folgte ich den Anweisungen von der nvidia Website. Neben der Überprüfung kompatibler Versionen von Dingen (gcc, kernel) gab es folgende Anweisungen:

sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb 
sudo apt-get update
sudo apt-get install cuda 

Glücklicherweise wurde der richtige nvidia-Treiber als Nebenprodukt der obigen Schritte installiert.

    
661266 25.09.2015 01:46
quelle
1

Ich verbrachte einen ganzen Tag damit, " ppa: graphics-drivers / ppa " zu verwenden, um die NVIDIA zu aktualisieren Treiber auf Version 352. Alles gescheitert. Nach einer Installation meldet die Datei gpu-manager.log, dass die Treiber installiert wurden, während Xorg.0.log das Gegenteil meldet.

Der Nouveau-Fahrer wurde entfernt und auf die schwarze Liste gesetzt:      sudo apt-get --purge entferne xserver-xorg-video-nouveau      cat /etc/modprobe.d/nouvea-nomodeset-jsrobin.conf         Blacklist Nouveau         Optionen Jugendstil Modeset = 0         alias nouveau aus         alias lbm-nouveau aus

Ich gab schließlich auf und benutzte eine reine "NVIDIA ... bin" Lösung.

  1. Blacklisted nouveau, wie oben gezeigt.
  2. hat den neuen Xserver vollständig deinstalliert, wie oben erwähnt.
  3. Setzen Sie das Systembios so, dass es PCIe (die beiden nvidia-Karten) als primary hat, und deaktivieren Sie die Mainboard HD4600-Schnittstelle.
  4. startete in den Wiederherstellungsmodus, aktivierte das Netzwerk und ging dann in den Konsolenmodus.
  5. Ran "NVIDIA-Linux-x86_64-352.41.run -uninstall" um sicherzustellen, dass nichts mehr übrig ist.
  6. Gelöschte alte Verzeichnisse in / etc, / usr / local, die aussahen wie ein Rest von cuda oder nvidia-Installationen.
  7. Lief "NVIDIA-Linux-x86_64-352.41.run"
  8. Ran "NVIDIA-Linux-x86_64-352.41.run --check", um zu überprüfen, ob alles korrekt war (es war).
  9. Dann wurde "cuda_7.5.18_linux.run" ausgeführt, um die Installation abzuschließen. Die Dinge arbeiten gerade. Beide Monitore sind betriebsbereit. Arbeitet derzeit am Erstellen der Cuda-Beispieldateien. Stellen Sie sicher, dass Sie die Flags "--help" in den NVIDIA-Installations-Bins verwenden. Der Hauptgrund, warum ich mich dafür entschieden habe, die bin-Route zu gehen (zusammen mit einer der Alternativen, die nicht funktioniert, ist, dass der "bin" -Ansatz einen einfachen Weg zur Wiederherstellung nach einem "mesa" OpenGL-Update bietet.
user225932 18.09.2015 19:05
quelle
0

Bitte beachten Sie: link . Es bezieht sich im Wesentlichen auf die Installation von Caffe, adressiert aber auch die CUDA-Installation.

    
amirsina torfi 27.10.2016 08:53
quelle
-1

Ich habe sudo su ausprobiert und apt-get installiere cuda anstelle von sudo apt-get install cuda. Es hat funktioniert.

 sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
 sudo apt-get update
 sudo su
 apt-get install cuda
    
softgearko 05.02.2016 03:54
quelle
-1

-Probleme mit Lightdm Login (Login-Schleife)

-Probleme mit Treiber istall ("Treiberinstallation fehlgeschlagen: es scheint, dass ein X-Server läuft ...")

Um ein NVidia CUDA Toolkit unter Ubuntu 16.04 64bit erfolgreich zu installieren, musste ich einfach Folgendes machen:

  1. mache ein LiveImage von Ubuntu auf einem PenDrive (8GB Pen ist genug) - Ein solcher Versuch wird eine Menge Nerven sparen , bevor nicht erfolgreich Installieren Sie auf Ihrem Host-Linux-System !!!
  2. Anmeldung bei Live-Sitzung auf Pendrive ("Ubuntu ausprobieren, vor der Installation") )
  3. Fügen Sie sudo Benutzer bei Live-Sitzung hinzu:

    sudo adduser admin (#pass: admin1)

    sudo usermod -aG sudo admin

  4. Loggen Sie sich aus der Live-Sitzung aus und melden Sie sich als #admin

  5. an
  6. Laden Sie das CUDA Toolkit von der offiziellen NVidia-Website herunter (~ 1.5GB)
  7. Ändern Sie die Berechtigungen für die heruntergeladene Installationsdatei (NICHT INSTALLIEREN In diesem Schritt! ):
    sudo chmod + x cuda_X.X.run

  8. Wechsel zur Konsolenansicht:

    Strg + Alt + F1 (um die Terminalansicht einzuschalten) Ctr + Alt + F7 (um von der Terminalansicht zum graphischen Server zu wechseln)

  9. in der Konsolenansicht (Ctr + Alt + F1) einloggen:

    Anmeldung: Admin Übergeben: admin1

  10. stop graphical running service:

    sudo service lightdm stop

  11. Überprüfen Sie, ob der grafische Server ausgeschaltet ist - nach dem Wechsel von Ctr + Alt + F7  Der Monitor sollte schwarz sein. Wechseln Sie zur Konsolenansicht zurück  Strg + Alt + F1

  12. Installieren Sie das CUDA Toolkit mit folgender Konfiguration:

    sudo ./cuda_X.X.run (Drücken Sie 'q' für Lizenz lesen überspringen) Installieren Sie keine OpenGL-Bibliothek Aktualisieren Sie die System X-Konfiguration nicht andere Optionen machen ja und Pfade als Standard

  13. schalten Sie den graphischen Server ein:

    sudo service lightdm start

  14. Melden Sie sich als Benutzer an (wenn Sie sich bei Live automatisch als #ubuntu anmelden  Sitzung abmelden):

    Anmeldung: Admin Übergeben: admin1

  15. Überprüfen Sie, was auch immer nvcc Compiler mit bereitgestellten einfach funktioniert  Parallele Vektorsumme bei GPU-Blöcken:

    speichern Sie vecSum.cu und book.h bei neuen Dateien, kompilieren Sie und führen Sie sie am Terminal aus: /usr/local/cuda-8.0/bin/nvcc vecSum.cu & amp; & amp; klar & amp; & amp; ./a.out

  16. Überprüfen Sie den Konsolenausdruck - er sollte ähnlich sein wie: 0.000000 + 0.000000 = 0.000000

    -1.100000 + 0.630000 = -0.000000
    
    -2.200000 + 2.520000 = 0.319985
    
    -3.300000 + 5.670000 = 2.119756
    -4.400000 + 10.080000 = 5.679756
    -5.500000 + 15.750000 = 10.250000
    -6.600000 + 22.680000 = 16.017500
    -7.700000 + 30.870001 = 23.170002
    -8.800000 + 40.320000 = 31.519997
    -9.900000 + 51.029999 = 41.129967
    
  17. Wenn alles bei Pendrive Livesitzung gut gelaufen ist, machen Sie dasselbe auf Ihrem Host-Linux-System

P.S. Bitte beachten Sie, dass es nicht ideal Tutorial ist, aber funktioniert gut für mich!

======= vecSum.cu =====

#include "book.h"
#define N 50000
///usr/local/cuda-8.0/bin/nvcc vecSum.cu && clear && ./a.out

//"HOST" = CPU
//"Device" = GPU

__global__ void add( float *a, float *b, float *c )
{
    int tid = blockIdx.x;
    if ( tid < N )
        c[ tid ] = a[ tid ] + b[ tid ];
}

int main ( void )
{
    float a[ N ], b[ N ], c[ N ];
    float *dev_a, *dev_b, *dev_c;
    //GPU memory allocation
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_a, N * sizeof( float ) ) );
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_b, N * sizeof( float ) ) );
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_c, N * sizeof( float ) ) );

    //sample input vectors CPU generation
    for ( int i = 0; i < N; i++ )
    {
        a[ i ] = -i * 1.1;
        b[ i ] = i * i * 0.63;
    }

    //copy/load from CPU to GPU data vectors a[], b[] HostToDevice
    HANDLE_ERROR( cudaMemcpy( dev_a, a, N * sizeof( float ), cudaMemcpyHostToDevice ) );
    HANDLE_ERROR( cudaMemcpy( dev_b, b, N * sizeof( float ), cudaMemcpyHostToDevice ) );

    //calculate sum of vectors on GPU
    add<<<N,1>>> ( dev_a, dev_b, dev_c );

    //copy/load result vector from GPU to CPU c[] DeviceToHost
    HANDLE_ERROR( cudaMemcpy( c, dev_c, N * sizeof( float ), cudaMemcpyDeviceToHost ) );

    //printout results
    for ( int i = 0; i < 10; i++ ) printf( "%f + %f = %f\n", a[ i ], b[ i ], c[ i ] );

    //free memory and constructed objects on GPU
    cudaFree( dev_a );
    cudaFree( dev_b );
    cudaFree( dev_c );

    return 0;
}

========= book.h ======

/*
 * Copyright 1993-2010 NVIDIA Corporation.  All rights reserved.
 *
 * NVIDIA Corporation and its licensors retain all intellectual property and
 * proprietary rights in and to this software and related documentation.
 * Any use, reproduction, disclosure, or distribution of this software
 * and related documentation without an express license agreement from
 * NVIDIA Corporation is strictly prohibited.
 *
 * Please refer to the applicable NVIDIA end user license agreement (EULA)
 * associated with this source code for terms and conditions that govern
 * your use of this NVIDIA software.
 *
 */


#ifndef __BOOK_H__
#define __BOOK_H__
#include <stdio.h>

static void HandleError( cudaError_t err,
                         const char *file,
                         int line ) {
    if (err != cudaSuccess) {
        printf( "%s in %s at line %d\n", cudaGetErrorString( err ),
                file, line );
        exit( EXIT_FAILURE );
    }
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))


#define HANDLE_NULL( a ) {if (a == NULL) { \
                            printf( "Host memory failed in %s at line %d\n", \
                                    __FILE__, __LINE__ ); \
                            exit( EXIT_FAILURE );}}

template< typename T >
void swap( T& a, T& b ) {
    T t = a;
    a = b;
    b = t;
}


void* big_random_block( int size ) {
    unsigned char *data = (unsigned char*)malloc( size );
    HANDLE_NULL( data );
    for (int i=0; i<size; i++)
        data[i] = rand();

    return data;
}

int* big_random_block_int( int size ) {
    int *data = (int*)malloc( size * sizeof(int) );
    HANDLE_NULL( data );
    for (int i=0; i<size; i++)
        data[i] = rand();

    return data;
}


// a place for common kernels - starts here

__device__ unsigned char value( float n1, float n2, int hue ) {
    if (hue > 360)      hue -= 360;
    else if (hue < 0)   hue += 360;

    if (hue < 60)
        return (unsigned char)(255 * (n1 + (n2-n1)*hue/60));
    if (hue < 180)
        return (unsigned char)(255 * n2);
    if (hue < 240)
        return (unsigned char)(255 * (n1 + (n2-n1)*(240-hue)/60));
    return (unsigned char)(255 * n1);
}

__global__ void float_to_color( unsigned char *optr,
                              const float *outSrc ) {
    // map from threadIdx/BlockIdx to pixel position
    int x = threadIdx.x + blockIdx.x * blockDim.x;
    int y = threadIdx.y + blockIdx.y * blockDim.y;
    int offset = x + y * blockDim.x * gridDim.x;

    float l = outSrc[offset];
    float s = 1;
    int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
    float m1, m2;

    if (l <= 0.5f)
        m2 = l * (1 + s);
    else
        m2 = l + s - l * s;
    m1 = 2 * l - m2;

    optr[offset*4 + 0] = value( m1, m2, h+120 );
    optr[offset*4 + 1] = value( m1, m2, h );
    optr[offset*4 + 2] = value( m1, m2, h -120 );
    optr[offset*4 + 3] = 255;
}

__global__ void float_to_color( uchar4 *optr,
                              const float *outSrc ) {
    // map from threadIdx/BlockIdx to pixel position
    int x = threadIdx.x + blockIdx.x * blockDim.x;
    int y = threadIdx.y + blockIdx.y * blockDim.y;
    int offset = x + y * blockDim.x * gridDim.x;

    float l = outSrc[offset];
    float s = 1;
    int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
    float m1, m2;

    if (l <= 0.5f)
        m2 = l * (1 + s);
    else
        m2 = l + s - l * s;
    m1 = 2 * l - m2;

    optr[offset].x = value( m1, m2, h+120 );
    optr[offset].y = value( m1, m2, h );
    optr[offset].z = value( m1, m2, h -120 );
    optr[offset].w = 255;
}


#if _WIN32
    //Windows threads.
    #include <windows.h>

    typedef HANDLE CUTThread;
    typedef unsigned (WINAPI *CUT_THREADROUTINE)(void *);

    #define CUT_THREADPROC unsigned WINAPI
    #define  CUT_THREADEND return 0

#else
    //POSIX threads.
    #include <pthread.h>

    typedef pthread_t CUTThread;
    typedef void *(*CUT_THREADROUTINE)(void *);

    #define CUT_THREADPROC void
    #define  CUT_THREADEND
#endif

//Create thread.
CUTThread start_thread( CUT_THREADROUTINE, void *data );

//Wait for thread to finish.
void end_thread( CUTThread thread );

//Destroy thread.
void destroy_thread( CUTThread thread );

//Wait for multiple threads.
void wait_for_threads( const CUTThread *threads, int num );

#if _WIN32
    //Create thread
    CUTThread start_thread(CUT_THREADROUTINE func, void *data){
        return CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, data, 0, NULL);
    }

    //Wait for thread to finish
    void end_thread(CUTThread thread){
        WaitForSingleObject(thread, INFINITE);
        CloseHandle(thread);
    }

    //Destroy thread
    void destroy_thread( CUTThread thread ){
        TerminateThread(thread, 0);
        CloseHandle(thread);
    }

    //Wait for multiple threads
    void wait_for_threads(const CUTThread * threads, int num){
        WaitForMultipleObjects(num, threads, true, INFINITE);

        for(int i = 0; i < num; i++)
            CloseHandle(threads[i]);
    }

#else
    //Create thread
    CUTThread start_thread(CUT_THREADROUTINE func, void * data){
        pthread_t thread;
        pthread_create(&thread, NULL, func, data);
        return thread;
    }

    //Wait for thread to finish
    void end_thread(CUTThread thread){
        pthread_join(thread, NULL);
    }

    //Destroy thread
    void destroy_thread( CUTThread thread ){
        pthread_cancel(thread);
    }

    //Wait for multiple threads
    void wait_for_threads(const CUTThread * threads, int num){
        for(int i = 0; i < num; i++)
            end_thread( threads[i] );
    }

#endif




#endif  // __BOOK_H__
    
Piotr Lenarczyk 18.10.2016 11:15
quelle

Tags und Links