TUTORIAL DAN CONTOH PENERAPAN THREAD LINUX ? WOW

00.12 0 Comments A+ a-

 

INTERMEZZO

Yo, mimin kembali lagi. Seperti janji mimin yang kemarin, mimin masih membahas tentang linux tapi bahasan kali ini agak expert. So, jika kalian gak kuat silahkan lambaikan tangan.
Kali ini mimin akan membahas tentang thread.
Apa itu thread ? thread adalah bagian kecil dari proses.



THREAD

Thread adalah bagian kecil dari proses, biasa disebut light proses (proses ringan). Seperti yang kita ketahui, proses akan menjalankan satu persatu command yang ada didalamnya dari atas kebawah. Jadi command yang berada dibawah harus menunggu command atas selesai baru bisa dijalankan. Dengan adanya thread ini, kita bisa menjalakan command bawah tanpa harus menunggu command atas selesai. Dengan kata lain, bersamaan.
Hampir semua aplikasi di dunia ini menggunakan teknik thread. Contohnya Ms.Word. Di Ms.Word selagi kita meningputkan kata dan kalimat, ada proses yang menampilkan inputan kita, disisi lain ada proses yang mengecek spelling inputan kita. Contoh lainnya adalah game balapan. Pada saat kita sedang bermain ada proses yang merender lintasan balap, ada proses yang mengecek posisi urutan kendaraan kita, ada proses yang menampilkan speed, dan Itu dilaksanakan secara bersamaan.

MAKE YOUR OWN THREAD

Supaya kalian tidak bosan, langsung saja kita praktekan cara membuat thread.
Mimin akan kasi contoh program music player sederhana. Menggunakan media player VLC (Download kalau belum terinstal) dan bahasa c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
#include<unistd.h>

pthread_t tid[1];
int choice;
char lagu[100], tmp[1000];
int length;

void stop()
{
    int i;
    for(i=1;i<=length;i++)
    {
        sleep(1);      
    }
    system("pkill vlc");
    system("clear");

}

void cont()
{
    int i;
    for(i=1;i<=length;i++)
    {
        sleep(1);      
    }
    system("pkill -SIGCONT vlc");
    system("clear");

}

void pos()
{
    int i;
    for(i=1;i<=length;i++)
    {
        sleep(1);      
    }
    system("pkill -SIGSTOP vlc");
}
void menu()
{
    printf("2 - Melihat Play list\n");
    printf("3 - Play Lagu\n");
    printf("4 - Pause Lagu\n");              
    printf("5 - Continue Lagu\n");
    printf("6 - Stop Lagu\n");
}

void *play(void *args)
{
    system("clear");
    snprintf(tmp, sizeof(tmp), "cvlc ~/Modul3/1/Playlist/%s.mp3",lagu);
    system(tmp);
    system("clear");
}

int main()
{
    int i=0;
    int err;
    int ke=0;
    char temp;

    printf("Selamat datang di naive Music Player\n");
    printf("Tekan 1 untuk melihat menu");  
    while (1)
    {
        printf("\n1 - Help\n");
        scanf("%d",&choice);
        if(choice==1)
        {
            system("clear");
            menu();
                }
        else if(choice==2)
        {
            system("clear");
            system("ls Playlist | grep mp3");
        }
        else if(choice==3)
        {
            system("clear");
            system("pkill vlc");
            printf("Masukan Judul Lagu : ");
            memset(lagu,0,sizeof(lagu));  
            scanf("%s",lagu);
            err=pthread_create(&(tid[choice]),NULL,&play,NULL);
            if (err!=0)
            printf("Cant create thread : [%s] ",strerror(err));
        }
        else if(choice==4)
        {
            printf("Input waktu Pause : ");
            scanf("%d",&length);
            pos();
            system("clear");
        }
        else if(choice==5)
        {
            printf("Input waktu Continue : ");
            scanf("%d",&length);
            cont();
            system("clear");
        }
        else if(choice==6)
        {
            printf("Input waktu stop : ");
            scanf("%d",&length);
            stop();  
        }
        else
        {    system("clear");
            printf("INPUTMU SALAH CUK! BACA YANG BENER!");
        }
    }
    pthread_join(tid[1],NULL);
    return 0;
}
Jadi ini contoh kodingan threadnya. Program ini meminta kita untuk memilih menu. Jika tekan 1 akan keluar button menunya, tekan 2 untuk melihat isi .mp3 yang ada di folder (contoh di atas ada di folder Playlist). 3 untuk memplay lagu dengan menginput nama lagu. 4 untuk pause lagu setelah n detik. 5 resume lagu setelah n detik dan 6 stop lagu.  Jadi program ini membutuhkan 2 thread, yakni thread untuk memplay lagu, dan thread untuk menerima inputan user (main)
Yuk kita bahas satu-persatu.

1.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
#include<unistd.h>

pthread_t tid[1];

ini adalah header-header yang diperlukan untuk membuat thread.
Bagian pthread_t tid[1] adalah bagian penginisialiasian pembuatan thread kita. Kalau dari contoh diatas kita hanya perlu menambahkan 1 thread, makanya disini tid[1].

2.
void *play(void *args)
{
    system("clear");
    snprintf(tmp, sizeof(tmp), "cvlc ~/Modul3/1/Playlist/%s.mp3",lagu);
    system(tmp);snprintf(tmp, sizeof(tmp), "cvlc ~/Modul3/1/Playlist/%s.mp3",lagu);
    system("clear");
}

ini adalah fungsi dimana letak thread play lagu nantinya. void *play(void *args) adalah syntax dari pembuatan thread, dimana return value dan passing parameter fungsinya berupa void berpointer (void *) .
snprintf(tmp, sizeof(tmp), "cvlc ~/Modul3/1/Playlist/%s.mp3",lagu);
instruksi diatas adalah instruksi dimana kita akan memplay lagu. cvlc adalah syntax bawaan VLC untuk memplay lagu, dan ~/Modul3/1/Playlist/%s.mp3 adalah letak dimana lagu itu berada. (Contoh di atas ada di folder Modul3->1->Playlist).

3.
else if(choice==3)
        {
            system("clear");
            system("pkill vlc");
            printf("Masukan Judul Lagu : ");
            memset(lagu,0,sizeof(lagu));  
            scanf("%s",lagu);
            err=pthread_create(&(tid[0]),NULL,&play,NULL);
            if (err!=0)
            printf("Cant create thread : [%s] ",strerror(err));
        }

Bagian ini adalah bagian dimana thread akan dibuat. Tepatnya di
err=pthread_create(&(tid[0]),NULL,&play,NULL);
Intruksi ini akan membuat thread dan menaruhnya di fungsi play tadi. err adalah variable tampung untuk pthread_create ini.
if (err!=0)
printf("Cant create thread : [%s] ",strerror(err));
Intruksi ini berfungsi untuk jika thread gagal dibuat akan menampilkan pesan error "Cant create thread"

4.
pthread_join(tid[0],NULL);
Intruksi diatas berfungsi untuk menahan agar proses utama (main) tidak selesai. Karena jika proses utama selesai maka thread juga akan ikut selesai. (Dalam kasus ini lagu akan mati sebelum lagu selesai dimainkan).


TESTPLAY

Yuk coba kita jalankan programnya



Kompilenya pake -lpthread yaa karena mengandung thread
Jalankan!
Boom!
Liat daftar lagu dulu
Play judul 12
Boom!!! Success
Pause ahh
Oke sekian dulu postingan mimin. Semoga bermanfaat :)