Category Archives: Xpert-1

Pengetahuan Dasar Pemrograman MultiThread di C#

C# memungkinkan kita mengeksekusi  code secara  parallel melalui  multi-threading.

Apa yg dimaksud dgn Thread

Thread adalah potongan kode yg independent (dari sebuah proses)  yang di ekseskusi oleh CPU yg penjadwalanya di lakukan oleh Operating sytem . Thread dibuat oleh programmer, bagian mana saja yg akan dijadikan thread ditentukan oleh programmer. Setiap thread mendapat jatah waktu  dikerjakan CPU yg disebut quantum.

Perbedaan Multi-Tasking dan Multi-treading

Multitasking adalah beberapa proses aplikasi yang dijalankan secara paralel (sebenarnya sih dijalankan bergantian secara cepat) oleh operating system contohnya anda menjalankan program ms.excel sambil  membuka program  musik WinAmp .  Kita merasakan program  excel dan winamp berjalan bersamaan , padahal sebenarnya CPU diperintahkan oleh  OS mengeksekusi  program excel dan winamp secara bergantian dgn kecepatan tinggi.

Multi-treading adalah beberapa tread potongan program dlm satu proses  yang dilaksana secara paralel (sebenernya sih bergantian secara cepat( kecuali prosesornya multi core)  dan thread dibuat oleh programmer. Contohnya adalah sebuah program server misal chat server maka ia harus melayani permintaan client  yang datang hampir bersamaan secara paralel. server akan membuat thread untuk melayani tiap client yg datang. setiap client dilayani oleh satu thread. sehingga tidak ada antrian jika client yang datang banyak.

Untuk melihat Prosses dan thread yang sedang aktif di OS windows anda bisa menekan Alt+Ctrl+Del  klik menu Task Manager maka akan tampil sbb:

(jika kolom thread tdk tampak , klik menu View ->select colom->di centang/check  thread count.)

Daftar Proses dan jumlah threadnya pada OS windows

Perumpamaan lain multi-threading adalah  Koki di restoran  yang mempunyai anak buah. Untuk setiap pelanggan dilayani oleh 1 anak buah jadi pelanggan tdk perlu menunggu lama. Koki nya adalah program/proses, anak buah kokinya adalah thread.

ilustrasi perbandingan mono thread  dan multi thread

Daur hidup thread

Thread dalam setiap saat mempunyai satu keadaan  dari beberapa keadaan sebagaimana gambar berikut ini:

thrad_lifecycle

Beberapa contoh manfaat Thread

 – Pada user interface

Sebuah proses dlm program biasanya berurutan  spt ini:

Input data->proses data->menampilkan data.

tiap  proses bisa jadi memakan waktu lama.  jika tiap proses di atas masing masing dibuatkan sebuah thread maka  ketika  data sedang di proses input data bisa tetap berlangsung dan ketika proses data sedang berlangsung bisa juga di cancel karena proses diatas berjalan secara paralel.

– Pada aplikasi  server

Misalkan aplikasi webserver , aplikasi ini melayani permintaan page untuk tiap permintaan client yg datang. Tiap client yang datang dilayani oleh 1 thread . jika pada saat yg hampir bersamaan datang 10 client maka akan dibuatkan 10 thread yg melayani secara bersamaan. contoh lain adalah program chat client -server.

Contoh ilustrasi : mencuci tumukan gelas dan piring secara bersamaan
kita buatkan 2 thread . 1 thread untuk mencuci piring dan 1 thread untuk mencuci gelas. sehingga gelas dan piring dicuci  secara paralel.

Multitreading di C#

.NET framework class library   mengelola multithreading di namespace  System.Threading.  adapun class  classnya adalah class thread dan class monitor.   adapun  secara singkat tahapan membuat thread pada program kita adalah
1.  objek thread dibuat   dengan cara
Thread objek_thread = new thread (new Threadstart(obj_methode)
2. lalu thread dimulai dhn methode start.
keterangan:  Threadstart adalah delegate , obj_methode adalah methode yg akan dijalankan delegate threadstart.
Contoh 1 , kita membuat dua buah thread yaitu thread  pertama cuci gelas dan thread kedua cuci piring.
Program mencuci  tumpukan gelas dan tumpukan piring dgn threading

using System;
using System.Threading;   // namespace multithreading

public class MyThread {

public static void Thread1() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
Thread.Sleep(3000);
}

}

public static void Thread2() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
Thread.Sleep(3000);
}
//Thread.Sleep(3000);
}
}

public class MyClass {

public static void Main() {
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);

Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1 ) );
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2 ) );

tid1.Start();
tid2.Start();
}
}

Memang jika di lihat hasil  di layar monitor terlihat secara selang seling, tapi secara tdk terlihat  ke 2 thread di proses paralel.

hasil multithreading di monitor

Hasil program diatas adalah : piring dan gelas di cuci secara bersamaan dan selesai  secara bersamaan.

Kalau program diatas tanpa threading maka hasilnya akan berurutan mencuci gelas sampai selesai baru kemudian mencuci piring sampai selesai.

Program mencuci tumpukan gelas dan piring tanpa threading:

using System;
using System.Threading;

public class non_Thread {

public void cuci_gelas() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);

}

}

public void cuci_piring() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);

}
}
}

public class MyClass {

public static void Main() {
Console.WriteLine(“=======================================”);
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Console.WriteLine(“=======================================”);

non_Thread tid1 = new non_Thread();

tid1.cuci_gelas();
tid1.cuci_piring();

Console.WriteLine(“=======================================”);
Console.WriteLine(” Selesai…nyucinya ! “);
Console.WriteLine(“=======================================”);

}
}

program tanpa threading

Hasil dari program diatas adalah: gelas  dicuci  lebih dahulu sampai selseai  kemudian disusul piring.

Contoh ke 2 ,  dua buah thread yaitu iris cabe dan ulek bawang

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication5
{

class ThreadTester
{
static void Main( string[] args )
{
// membuat thread dan beri nama.

kerjaan_thread kerjaan1 = new kerjaan_thread();
Thread thread1 = new Thread ( new ThreadStart( kerjaan1.iris_cabe ) );
thread1.Name = “iris cabe”;

kerjaan_thread kerjaan2 = new kerjaan_thread();
Thread thread2 = new Thread(new ThreadStart(kerjaan1.ulek_bawang ));
thread2.Name = “ulek bawang”;

Console.WriteLine(“================ \n”);
Console.WriteLine( “threads di aktifkan” );
Console.WriteLine(“================ \n”);
// started state -> running state
thread1.Start();
thread2.Start();

Console.WriteLine(“====================================”);
Console.WriteLine( “semua thread (pekerjaan) stand by , siap di kerjakan KOKI ” );
Console.WriteLine(“====================================”);

}

} // end class
class kerjaan_thread
{

private int waktutidur_iriscabe ;
private int waktutidur_ulekbawang ;
private static Random random = new Random();
public kerjaan_thread()
{

waktutidur_iriscabe = 2000;
waktutidur_ulekbawang = 1000;

}
//
public void iris_cabe()
{

for (int i=0; i < 4; i++)
{
Console.WriteLine(“iris cebe ke{0}”, i);
Thread current = Thread.CurrentThread;
Console.WriteLine(current.Name +” diistirahatkan selama ” + waktutidur_iriscabe + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_iriscabe);
Console.WriteLine(current.Name + “bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}

} // end method masak
public void ulek_bawang()
{
for (int i=0; i< 2; i++)
{
Console.WriteLine(“ulek bawang ke{0}”, i);
Thread current2 = Thread.CurrentThread;
Console.WriteLine(current2.Name + ” diistirahatkan selama ” + waktutidur_ulekbawang + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_ulekbawang);
// print thread name
Console.WriteLine(current2.Name + ” bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}
}

} // end
}

contoh_thread2

 

Untuk melihat jumlahthread yg running dgn cara  saat program sedang jalan coba anda ketik alt-ctrl-del , kemudian pilih task manager

thread_running

 

syncronisasi thread

Jika ada dua thread yg bersamaan merubah  sebuah data, maka akan terjadi data tdk valid, untuk mencegah ini dibuat mekanisme

THREAD SYNCRON2

Sumber

http://www.codeproject.com/Articles/1083/Multithreaded-Programming-Using-C

– http://www.codeproject.com/Articles/26148/Beginners-Guide-to-Threading-in-NET-Part-1-of-n

– http://www.albahari.info/threading/threading.pdf

– http://www.techrepublic.com/article/a-beginners-guide-to-threading-in-c/1044970

Pengetahuan Dasar C# .Net Micro Framework untuk microcontroller ARM (modul Netduino)

Apa itu .Net Micro Framework?

.Net Micro Framework adalah  flatform NET untuk pemrograman embeded yg terintegrasi dengan Visual studio  ,  menggunakan bahasa pemrograman  C#.

perbandingan Net Micro

Kelebihan .Net Micro:

  • Easily develop powerful, interactive, and complex applications
  • Securely connect devices over wired or wireless protocol
  • Develop full solutions using .NET including devices, servers, and the cloud
  • Rich base class library
Kekurangan dari .Net Micro
Exsekusi program .net micro  lebih lambat dari pemrograman native code  (asembler atau bhs c) .

Sofware yg dibutuhkan


1. Microsoft Visual C# Express 2010

2. Microsoft .NET Micro Framework v4.1 SDK

3.  Netduino1 SDK 4  (disediakan oleh  SecretLabs)

(jika anda menggunakan modul selain netduino maka kebutuhan software no 3 juga di sesuaikkan dgn modul yg anda gunakan)

Hardware

Modul hardware yang kita gunakan  adalah Netduino  sebuah open-source electronic  platform  yg menggunakan  .NET Micro Framework .  Rangkaiannya ada disini .  Kalau mau beli sepertinya sudah ada di prasimax.

saat ini Netduino ada 3 model

1. Netduino

2. Netduino mini

3. Netduino plus

Netduino spec

Membuat Project Baru

1. Buka Visual Studio atau C# express

2. New Project

3. Pilih template Micro Framework spt tampak dibawah ini , sesuaikan dgn modul netduino yg anda miliki.

Tanpilan Menu pilihan C# micro

5. Klik program.cs

copy dan pasta program    C# Net Micro  Netduino  berikut ini.

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
public class BlinkingLed
{
public static void Main()
{
var ledPort = new OutputPort(Pins.ONBOARD_LED, false);
while (true)
{
ledPort.Write(true);               //  LED on
Thread.Sleep(500);              // delay 500 ms
ledPort.Write(false);           //  LED off
Thread.Sleep(500);           // delay 500 ms
}
}
}

6. klik menu Debug->Build Solution

Jika sukses maka kita bisa melanjutkan dengan mengirim program yang sudah di buld ke Modul melalui port komunikasi USB.

Langkah mentrasfer program yg sudah dibuild ke modul sebagai berikut

1. klik kanan pada project dan klik properties

net micro project properties

2.  klik tab menu .NET Micro Framework. kemudian set spt gambar  antara lain:

  • Configuration  :  Active (Debug)
  • Platform             :  Active (Any CPU)
  • Transport          :   USB
  • Device                :   select your Netduino from the drop-down list.
  • Generate native stubs for internal methods  :    unchecked

Properties net microframework

Kalau pada isian text boxt  “Device”  kosong , kita harus mengkoneksi modul netduino ke PC kita dulu lewat port  USB nya.

3. Klik menu Debug-Start Debugging , maka program akan ditransfer ke Modul Netduino.

Untuk menghapus program di modul gunakan MFDeploy lokasinya ada di :

C:\Program Files\Microsoft .NET Micro framework\v4.1\Tools\MFDeploy.exe

Tool MFDeploy net Micro framework

Langkah langkah Menghapus program di Modul Netduino

1. Buka MFDeploy  pastikan  pilih “USB” pada  pilihan Device spt pd gambar diatas.

2.  Cabut dan pasang kembali USB cable  sambil tombol di netduino ditekan.

3. lepas tombol dan klik erease pada MFDeploy.

selesai.

Contoh 2  membaca penekanan tombol

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace ButtonApp
{
public class Program
{
public static void Main()
{
// write your code here
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
InputPort button = new InputPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled);
bool buttonState = false;

while (true)
{
buttonState = button.Read();
led.Write(!buttonState);
}

}

}
}

Untuk  memperdalam C# .Net Micro Framework  ada baiknya  anda  pelajari juga  dasar  bahasa pemrograman C#   .

sumber

http://www.netduino.com

– http://www.microsoft.com/en-us/netmf/default.aspx