Sabtu, 07 November 2015

Thread PThread ? ? OPOSEH

Okee bradda n sista , setelah beberapa minggu ga post , kali ini mimin ingin berbagi pengetahuan lagi nih .. 

Apasih thread itu ?

Thread adalah bagian kecil dari suatu proses yang bisa di jadwalkan oleh sistem operasi.

Thread juga disebut sebagai proses ringan (lightweight).
a. Single Threading
Adalah sebuah proses yang hanya memiliki satu thread yang berjalan.
Biasanya fungsi thread ini digunakan sebagai pengendali jalannya proses.
b. Multi Threading
Adalah proses yang memiliki lebih dari satu thread yang berjalan didalamnya,
sehingga dalam hal ini proses dapat menjalankan lebih dari satu tugas dalam satu waktu.





Mau tau cara penggunaanya di pemrograman ? yuk kita coba sama .. 






Sediakan laptop mu , linux OS mu dan "NIAT" .
Kali ini kita akan coba buat sebuah player music sederhana nih guys  yang mana spesifikasinya sebagai berikut .. 

1. Perintah help untuk menampilkan daftar perintah yang dapat digunakan.
2. Memiliki fitur list untuk menampilkan semua lagu pada folder playlist
3. Memiliki fitur play untuk menjalankan lagu
4. Memiliki fitur pause setelah t detik
5. Memiliki fitur continue setelah t detik
6. Memiliki fitur stop setelah t detik 


Kita mulai tahap awal ... ayo siap2 ,
1.Seperti biasa , buka terminal di linux , pilih directory , siapin musik .mp3 mu untuk tes nanti , lalu kita mulai koding koding, ketik "gedit <namafileterserah>.c" 

2.Masuk ke interface gedit , kita ketikkan semua file library yang diperlukan , ini nih , 
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>


3. Kita masuk main-nya dulu , mau ada apa aja di main program ini , 

    int err;
    printf("Selamat datang di Pemutar Music sederhana\n");
    printf("1.List Lagu\n2.Play\n3.Pause\n4.Continue\n5.Stop\n6.Help\n");
    while(1)
    {
        int menu;   
        scanf("%d",&menu);
        if(menu == 1)
            printf("\nList::\n");           
        else if(menu == 2)
            printf("\nPLaynow::\n");
        else if(menu == 3){           
            printf("\nPause setelah berapa detik?:: ");
            scanf("%d",&x);
            }
        else if(menu == 4){
            printf("\nContinue setelah berapa detik?::\n");
            scanf("%d",&x);
            }
        else if(menu == 5){
            printf("\nStop setelah berapa detik?::\n");
            scanf("%d",&x);
            }
        else if(menu == 6)
            printf("\nHelp::\n");


        err = pthread_create(&(tid[menu]),NULL,&playAndCount,NULL);
        if(err != 0)
            printf("\nCan't create thread:[%s]",strerror(err));
       
   
    }


Printf diatas itu buat welcome interface ke user *desainlahwkwk*
Masuk ke while(1) yang artinya terus dilakukan sampe ketemu break
nah yang dijalankan while ini lah basic operation-nya ,
pembuatan variabel menu , dan scanf menu meminta user menginputkan pilihan perintah yang di inginkan , scanf x  sebagai penanda keingin user kapan program akan pause continue atau stop , nah x ini dijadikana variabel global karna akan dipakai juga di fungsi playAndCount okehh..
Sesuai spesifikasi soal kita harus mempunyai perintah yang akan menjalankan:
1. List lagu

2. Pause setelah detik yang ke sekian
3. Continue setelah detik yang ke sekian

4. Stop setelah detik yang ke sekian 
5. Help yang memperlihatkan daftar menu yang bisa di akses.

Lalu inputan user tadi akan di inisialasi ke pembuatan_create dengan perintah pthread_create dengan argumen tersebut diatas dan memanggil fungsi eksekusi playAndCount

4. Kita masuk ke fungsi playAndCount yang berisi ::
     pthread_t tid[6];
    void  *playAndCount(){

    pthread_t id = pthread_self();
  
    char c[100];
    if(pthread_equal(id,tid[1])){
        system("clear");
        system("ls | grep .mp3");
    }
    else if(pthread_equal(id,tid[2])){
        system("clear");
        char buf[500];
        scanf("%s",c);
        snprintf(buf,sizeof(buf),"cvlc %s.mp3",c);
        system(buf);   
    }
    else if(pthread_equal(id,tid[3])){
        system("clear");
        sleep(x);
        system("clear");
        system("kill -20 $(pgrep vlc)");
    }
    else if(pthread_equal(id,tid[4])){
        system("clear");
        sleep(x);   
        system("kill -18 $(pgrep vlc)");
    }
    else if(pthread_equal(id,tid[5])){
        system("clear");
        sleep(x);
        system("kill -9 $(pgrep vlc)");
    }
    else if(pthread_equal(id,tid[6])){
        system("clear");       
        printf("1.List Lagu\n2.Play\n3.Pause\n4.Continue\n5.Stop\n6.Help\n");
    }
    return NULL;
}


okeh penjelasanya nih , pthread_t tid[6] yang ada di atas fungsi playAndCount itu sebagai inisialisasi kalau ada 6 thread yang akan beroperasi

Lalu dalam fungsi playAndCount :
 

if(pthread_equal(id,tid[1])) If disamping ini akan mengecek command perintah yang masuk jika menu = 1 akan mengeksekusi perintah yang ada begitupun dengan fungsi if selanjutnya :
        system("clear");
        system("ls | grep .mp3");

clear membersihkan window terminal ,  ls | grep.mp3 akan memberi daftar apa saja yang ada di dalam folder sesuai tempat program berada semua file yang berekstensi mp3

        scanf("%s",c);
      snprintf(buf,sizeof(buf),"cvlc %s.mp3",c);
      system(buf);

scanf meminta user menginputkan nama lagu yang akan di putar lalu snprintf dengan isi perintah cvlc akan memutar lagu berjudul sesuai inputan user . variable buf disana digunakan sebagai media penampung size snprintf.


        sleep(x);
        system("clear");
        system("kill -20 $(pgrep vlc)");

sleep(x) diatas adalah membuat program untuk menunda pekerjaanya atau diam sejenak sebesar x detik yang di input user di main tadi , system kill -20 diatas adalah syntax untuk mempause sebuah program berjalan , lalu pgrep vlc akan melihat di running program background apakah ada vlc yang berjalan.

       system("kill -18 $(pgrep vlc)");
system kill -18 adalah syntax untuk melanjutkan program yang sempat berhenti 

       system("kill -9 $(pgrep vlc)");
kill -9 adalah syntax untuk meng-kill atau terminate program yang sedang berjalan.

      printf("1.List Lagu\n2.Play\n3.Pause\n4.Continue\n5.Stop\n6.Help\n");

Nah if yang terakhir adalah untuk memperlihatkan menu yang bisa di akses user nanti . :) 


Gimana bisa?

Sekarang cara compilenya nih agak beda, kalo thread yang ada library pthread.h nya kita harus menambahkan -lpthread atau -pthread saat peng-compile-anya di terminal


Oke ini contoh cara running dan sampai pengeksekusian program yang pertama ya ..







Dibawah ini setelah eksekusi menu 1 


Nah untuk perintah perintah selanjutnya silahkan dicoba sendiri ya .. biar terpesona wkwkwk .

Sekian dari mimin nih .. Semoga bermanfaat  OKE

Tidak ada komentar :

Posting Komentar