Kelab Wanita Melayu.com:
Aktiviti ke 2, 18 Nov ini.
Sembang.com >> Sembang-Komputer >> VB : mari belajar membuat COM ( siri 5 )

Hantar topik baru | jawab mesej ini Pengendali sahaja: kunci topik | padam topik
  Dimasukkan oleh:   Topik: VB : mari belajar membuat COM ( siri 5 )
 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 14 Nov 2000 09:31:16   

=============a r k i b . C O M===================
siri 1 :
http://www.oocities.org/uumlinux/VBCOM/VB_COM.htm
siri 2 :
http://www.oocities.org/uumlinux/VBCOM/vbCOMPartTwo.htm
siri 3 :
http://www.oocities.org/uumlinux/VBCOM/COM_Marshaling.htm
siri 4 :
http://www.oocities.org/uumlinux/VBCOM/com_4.htm
================================================
OK, sila ke URL di atas utk mengikuti kelas COM. Insyallah, dgn pertolongan kawan-kawan yg tidak lokek ilmu disini, saya yakin ramai kawan-kawan yg lain boleh m'dapat manfaat dr topik ini.
Kredit:
TukangTaip + Jembalang + MasterOfPuppets


Kpd Tuan Pengendali :
Boleh kunci topik lama saya, Terima Kasih.

*mesej ini telah dikemaskini oleh gunx pada 15 Nov 2000 13:03:44*

IP: 202.188.127.2

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 15 Nov 2000 00:34:13   

Jembalang:
Memang slow...query time aku hari nie 181.077097 saat.Ni aku bukak pukul 12.25 tengah malam ni.
Nasib baik le gunx bukak part 5 pulak.

Aku masih nak tanya soalan yang hari tu. Aku rasa tukang taip mungkin tahu. Aku nak tahu secara teknikalnya apa yang dikatakan Thread Safe. Aku dah cuba cari, tapi tak mencukupi untuk aku memahaminya(mungkin tak paham pun). Segala usaha dan jawapan aku dahului dengan ucapan ribuan terimakasih.

A Man of Saracens

IP: 203.106.140.176

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 15 Nov 2000 01:53:42   

Dalam multi-threded programming, terdapat satu fenomena yang dipanggil "reentrance", di mana lebih dari satu thread akan cuba masuk ke dalam fungsi yang sama pada masa yang sama. Bayangkan satu beg berisi harta harun, dan ada 10 orang cuba seluk tangan ke dalam beg itu untuk ambil barang. Apa yang terjadi? Keadaan berebut-rebut.

Dalam senario komputeran, jika rebutan ini terjadi, (1) program anda boleh crash, (2) anda mendapat keputusan yang salah.

Object/function yang thread safe merupakan object/func yang mampu mengendalikan perebutan tersebut. Ini dilakukan menggunakan mekanisme yang dipanggil "synchronization". Dari segi coding, ada beberapa jenis objek/variable yang boleh digunakan untuk tujuan ini, contohnya Critical Sections, Mutexes, Semaphores dan Events. Asasnya, objek2 ini membantu 'penjaga guni' agar orang-orang yang sedang berebut itu dapat beratur.

Dalam Java, class-class synchronization terdapat dalam bahasa itu sendiri. Dalam C++, kita perlukan pertolongan dari luar. Contohnya dalam Visual C++, kena gunakan MFC class CMutex, CCriticalSection, CEvent digabung dengan CSingleLock dan CMultiLock.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.33

 jEmBaLanG
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 15 Nov 2000 04:09:51   

Mutex... semaphores... critical section??

hmm sounds familiar...
jembalang blaja masa degree dulu.. dalam course Operations System....

its a very interesting thing to learn...



jEmBaLanG

IP: 202.151.205.236

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 15 Nov 2000 11:09:41   

It's very interesting, asalkan kita tak perlu buat programnya!

Bagi tukangtaip, multithreaded programming ialah antara programming yang paling memeningkan kepala. Fuuh memang pening untuk synchronizekan resource access antara thread-thread tu. Oleh kerana banyak thread yang berlari serentak, tugas debugging menjadi lebih susah dari biasa. Kalau single-threaded programming boleh juga step into the code satu persatu, tapi multithreading terpaksa teliti sendiri kod tu dan teka/agak di mana kesilapannya.

Tapi habih nak buat camno.. dah kerja macam tu? Program yang tukangtaip buat sekarang ada lebih kurang 13 thread yang berlari serentak. Biasanya tak ada masalah, tapi masalah terjadi bila program itu dihentikan oleh pengguna.

Susah nak cerita tanpa menunjukkan source code, tapi lebih kurang macam ni.. parent thread buat child thread. Child thread ni tidur seketika, lepas tu sambung kerja balik. Bila pengguna hentikan program, parent thread pun berhenti juga. Tapi child thread ni masih hidup (sebenarnya masih tidur). Bila child thread ni bangun, dia nak gunakan shared-resources yang dipunyai oleh parent thread. Tetapi masalahnya, si parent thread dah mati, jadi resourcenya pun mati juga. Jadi bila child thread cuba juga access resource ini, maka crashlah program tu.

Begitulah kira-kiranya hikayat si parent-child thread.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

*mesej ini telah dikemaskini oleh tukangtaip pada 15 Nov 2000 11:14:10*

IP: 209.252.121.163

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 15 Nov 2000 11:21:27   

er...saya terjumpa sesuatu hari ini. Best juga !
Penggunaan Property Bag
Saya jumpa topik ini semasa belajar buat ActiveX Control. Tetapi bende ni boleh di gunakan utk membungkus parameter-parameter yg banyak menjadi satu. Maksudnya disini, jika saya ingin savekan 8 data ke DB. Saya boleh wrap-kan ia menjadi satu dgn m'gunakan property bag. Bila beg ini sampai ke COM (Data-Tier), saya akan pecahkan ia menjadi data asal, seterusnya proses save boleh dijlnkan.
Menarik kan?

powered by Black Ball with a green cross !!

IP: 202.188.127.2

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 15 Nov 2000 16:48:24   

tukangtaip:
13 thread ?Kira banyak tu.Program saya tak le sebanyak tu, lebih kurang 3 - 4 thread je.

Multithreading memang amat interesting bagi saya.Saya sedang belajar multithreading in VB, tapi bukan menggunakan threading model yang disokong oleh VB(Apartment Thread, single thread dan thread pool)sebaliknya saya menggunakan CreateThread API. VB 6 tidak membenarkan kita menggunakan CreateThread API, kalau buat jugak, program akan crash, tetapi tidak VB 5(service pack 3). Ini membuktikan VB 6 is less thread safe. Mungkin saya akan memasukkan facility multithreading dalam COM objek saya yang akan datang. Buat masa ini, saya masih lagi mencuba beberapa perkara(to see wat VB can do and what can't do), just try an error.

gunx:
Sorry le aku terkeluar tajuk pulak sikit, kau tak marah kan ? kan ? kan ?...

A Man of Saracens

IP: 161.142.78.81

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 15 Nov 2000 16:58:29   

mop :
hang nyer study dah habis ker ? bak mai no tel., lama tak kacau hang
saya masih m;gunakan Apartment Thread. Apa kelemahanan dia yg m'buatkan hang nak guna API ?
cerita sikit ? manalah tahu, saya boleh terpegaruh nak cuba.






powered by Black Ball with a green cross !!

IP: 202.188.127.2

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 16 Nov 2000 00:50:49   

gunx:
Study aku belum abis lagi, 2 tahun lagi.Sekarang ni aku cuti sampai abis belaja,tak jengok opis pun.Pasal multithreading pakai API ni, aku saje je nak mencuba benda baru, aku terfikir nak gunakan multithreading masa buat projek final year nanti, jadi lebih baik buat research sekarang. So, nanti aku dah ade pemahaman yang kukuh pasal multithreading pulak.Aku nak try multithreading menggunakan API dalam COM, but it is not so easy.Untuk menggunakan CreateThread API, kita kena pakai AddressOf operator untuk mendapatkan pointer to a function, tetapi dalam VB class module, AddressOf operator akan return pointer to a function in the vtable, not the actual function(CreateThread API memerlukan pointer to an actual function).Ni aku tengah cari jalan nak solvekan ni.

Apartment Threading Model
Note that apartment model threading as defined by COM does NOT require that each thread have its own set of global variables. That's just how Visual Basic implemented the apartment model. The apartment model states that each object may be created in its own thread, however once an object is created, its methods and properties may only be called by the same thread that created the object. If another thread wants to access methods of the object, it must go through a proxy.

This is a relatively easy model to implement. If you eliminate global variables (as Visual Basic does), the apartment model grants you thread safety automatically -- since each object is effectively running in its own thread, and due to the lack of global variables, the different object threads do not interact with each other

Free Threading Model
The free threading model basically says that all bets are off. Any object can be created in any thread. All methods and properties on any object can be called at any time from any thread. The object accepts full responsibility for handling any necessary synchronization.

This is the hardest model to implement successfully, since it demands that the programmer handle all synchronization. In fact, until recently, OLE itself did not support this threading model! However, since marshalling is never required, this is the most efficient threading model.



A Man of Saracens

IP: 203.106.188.211

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 16 Nov 2000 04:25:19   

Perbezaan antara komponen single-threaded (apartment-threaded) dan free-threaded, dalam ayat yang ringkas. Tapi tak janjilah boleh faham atau tidak ya.

Komponen single-threaded TAK BOLEH dicapai/digunakan oleh mana-mana thread KECUALI thread yang menciptanya saja.

Komponen free-threaded BOLEH dicapai/digunakan oleh semua thread dalam proses yang sama, sama ada thread itu yang mencipta (instantiate) komponen itu, atau thread di luar daripadanya.

Kalau kita configurekan komponen kita sebagai free-threaded, maka kita sebenarnya 'memberitahu' dunia luar bahawa komponen kita telah programkan (oleh kita) menggunakan objek2 synchronization. Ertinya kita sudah siap letakkan Critical Sections, etc. di dalam komponen itu yang membolehkan komponen itu di share oleh berbagai thread.

Tapi kalau kita configurekan komponen itu sebagai single threaded, maka kita memberitahu dunia luar bahawa komponen kita TIDAK sesuai untuk kegunaan multithreaded. Setiap thread yang ingin menggunakan komponen ini HARUS mencipta objek (instance) nya sendiri. Tak boleh main kongsi-kongsi.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.101

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 16 Nov 2000 04:34:35   

MOP: Yup, CreatThread memang memerlukan alamat fungsi (thread) yang ingin kita lancarkan. Tukangtaip tak tahu macamana nak buat dengan VB, tapi kalau C++ benda ini memang senang saja:

void MyFunc()
{
.. whatever ..
}

Kalau nak pass address MyFunc kepada sesiapa, kita hanya buat macam ni:

RunThisFunc(MyFunc);
RunThisFunc(MyFunc()); // bukan ini, salah!

Kerapkali orang bertanya mengapa C++ dikatakan satu bahasa yang 'berkuasa'. Dan inilah salah satu dari jawapannya. C++ membolehkan kita mencapai system resources (memory, terutamanya) dari satu jarak yang amat dekat. Of course, kebolehan ini boleh menjadi sesuatu yang berguna.. atau (lebih kerap) menjadi sesuatu yang memeningkan kepala. Lebih kurang macam bawa kereta manual vs kereta automatik.

Tukangtaip terpaksa adakan 13 thread itu untuk tujuan efficiency di dalam program tukangtaip. Tapi dalam 13 thread tu, hanya 3-4 saja yang sentiasa berlari. Yang lain-lain tu dilancarkan bila perlu saja, contohnya bila terdapat permintaan untuk thread itu. As a rule, kurang thread yang berlari serentak adalah lebih baik sebab kurang kemungkinan untuk berlaku pertelingkahan antara thread-thread tersebut. So kalau anda ada 3-4 thread vs. 13 thread tukangtaip, program anda mungkin lebih selamat dan senang di maintain dari program tukangtaip. Seperti yang tukangtaip katakan, tukangtaip hanya terpaksa buat begini kerana banyak thread-thread ini menghabiskan masa 'menunggu' akan sesuatu (bukan memproses). Maka jika tidak menggunakan multi-threaded programming, larian program ini akan menjadi lambat tanpa satu sebab yang munasabah (lambat kerana menunggu, bukan kerana memproses).

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.101

 jEmBaLanG
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 16 Nov 2000 06:02:44   

Tukangtaip... application apa yg tukangtaip sedang dalam development sampai pakai 13 threads tu?

citer la sket...


jEmBaLanG

IP: 202.75.128.12

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 16 Nov 2000 13:39:32   

Aplikasi tukangtaip tulis ialah berjenis Windows Service. (Sama macam daemon di Unix). Perbezaan antara service dengan aplikasi biasa: service dimulakan sekali (biasanya semasa komputer dipasang) dan ia terus berlari sehingga komputer dipadam.

Service tukangtaip menerima request dari modul-modul lain, sepertimana server IIS menerima request dari web page. Jadi perlu diprogramkan listener-listener yang sentiasa menunggu request dari client. Setiap listener ini tukangtaip larikan dalam thread yang berlainan. Kebaikannya, jika dua request datang serentak, dan request2 ini berjenis lain, maka request kedua tidak perlu tunggu request pertama habis diproses dulu. Kedua-duanya boleh diproses secara serentak, kerana kedua-duanya dilarikan dalam thread yang berbeza.

Selain dari listener threads yang tukangtaip ceritakan, juga terdapat thread-thread sementara yang tukangtaip gunakan untuk mematikan request yang sudah mula diproses tapi mengambil masa yang terlalu lama untuk disiapkan. Thread2 ini cuma tidur untuk kebanyakan hayatnya, dan selepas ia bangun dari tidur, ia mematikan request yang berkenaan.

Sistem yang tukangtaip tulis sebenarnya berfungsi lebih-kurang sama dengan MTS, iaitu mengkoordinasikan aktiviti-aktiviti participants dalam sesuatu transaksi.

Bezanya program tukangtaip (MTP) dengan MTS, MTP berlari di atas landasan MSMQ sementara MTS berlari atas landasan COM. Participant2 tukangtaip perlu di 'invoke' dengan menghantar mesej MSMQ kepada mereka. Bukan dengan memanggil method-method sesuatu komponen. Dan bila transaksi itu perlu dibatalkan (sebab berlaku kesilapan, timeout dsb.), maka program tukangtaip bertanggung-jawab untuk memberitahu setiap participant supaya rollback (undo) apa yang mereka telah buat selama ini.

Hmmm.. gitulah.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 209.252.122.221

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 16 Nov 2000 15:36:13   

tukangtaip:
Dalam VB, kalau nak dapatkan address function pun mudah aje, tapi VB hanya membenarkan cuma function dalam standard module sahaja(serupa macam function biasa dalam C/C++). Contohnya :

ptr = AddressOf(MyFunc)

Tetapi kalau kita nak dapatkan address method dalam COM objek(Class Module), AddressOf operator adalah tidak dibenarkan kerana ia akan memberikan address tersebut dalam vtable, bukan address yang sebenarnya. Saya tak tahu adakah ini boleh dilakukan dalam C++. Sekarang ni, apa yang saya boleh lakukan ialah client akan panggil method tersebut macam biasa, dan method tersebut pulak akan mencipta thread baru bagi satu function didalam standard module.Ini bermakna thread baru tersebut akan melarikan fungsi didalam standard module, bukan fungsi dalam class module.

A Man of Saracens

IP: 202.188.64.38

 jEmBaLanG
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 17 Nov 2000 02:49:11   

salams sumer...

aku tatau la kalau korang ada terjumpa artikel mengenai threads ke tak....
tapi just in case takde.. aku cakap je lah ek

there's a very nice guide for threading dalam
MSDN (part of Visual Studio 6 Enterprise Ed.)

korang cari file VBCON98.CHM then search for threading.. kat situ dia terang mengenai Apartment - Model Threading in VB dan sebagainya...

siap ada gambarajah lagi...

ok lah tu je.. just a quick reference ...

(iskk susah tol nak tido kol 2 pagi nih... )


jEmBaLanG

IP: 202.75.128.12

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 17 Nov 2000 05:42:51   

MOP: Itu tukangtaip rasa merupakan cara yang betul untuk melakukannya. Dengan melakukan sedemikian, method yang anda panggil akan dapat terus pulang kepada client. Client akan dapat terus jalan, tanpa menunggu pemprosesan tamat. Cuma pastikan satu saja -- jangan benarkan objek itu 'mati' (get out of scope) sebelum pemprosesan (child thread) itu tamat.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.33

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 17 Nov 2000 14:34:32   

jEmBaLang:
Thank's. Disitulah sebenarnya aku bermula. Aku guna CreateThread API untuk membolehkan client memanggil method secara asynchronous secara lebih efisien, sebelum ni aku menggunakan teknik lain, bukan menggunakan CreateThread API. Teknik yang aku guna sebelum ni banyak overhead.

tukangtaip:
Memang betul ,macam yang tukangtaip beritahu sebelum ni, method dipanggil secara asynchronous.
That is the beauty of CreateThread API. We have the full control of the thread.

Tapi VB masih ada limitation. CreateThread tidak boleh digunakan dalam AxtiveX DLL project. Ini adalah kerana VB run-time tidak membenarkan Free Model Threading(CreateThread API) didalam DLLnya, hanya Apartment Model Threading dan Single Model Threading sahaja dibenarkan(which is built in into VB). Free Model Threading(CreateThread API) hanya boleh dilakukan didalam projek Standard EXE ataupun ActiveX EXE. Testing yang saya buat pun mengunakan ActiveX EXE server. Client memanggil method menggunakan DCOM subsystem sekiranya objek terletak di mesin yang lain.


Setakat ini, saya hanya tahu buat Free Model Threading dalam VB menggunakan CreateThread API sahaja. Kalau kawan-kawan tahu cara lain, boleh la kita share kat sini.

A Man of Saracens

IP: 203.106.139.117

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 17 Nov 2000 15:30:39   

mop:
Adakah sekarang u guna ActiveX.exe ?. So , u tak guna MTS laa...Saya rasa asyncronous process amat penting. OK , katakan saya query status link Brickfield ke JRC. Saya dah benchmark (sila rujuk siri 4).Pada permulaan query, ia mengambil masa yg amat lama. (krn Pools tidak dihasilkan lagi).So, mungkin user frustated ktn response yg lambat dan tendency utk melakukan kerja lain amat tinggi.Jadi, asynronous memainkan peranan di sini. FYI, saya banyak menggunkan DLL dan user past akan 'terikat' dgn process tadi dan terpaksa tunggu sampai tamat. Ada cara lain nak solve?

powered by Black Ball with a green cross !!

IP: 202.188.127.2

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 17 Nov 2000 17:10:01   

kpd cikgu:
saya sekarang sudah mula membuat re-develop system dahulu (sistem sebelum ini berkonsepkan 2-tiers + structured-styled). So, saya ingin m'dapat nasihat kawan-kawan sekalian. Boleh komen architecture ini tak ?

Tiers 1 :
VB-Forms + User-Centric Business Objects (dll)

Tiers 2 :
Data-Centric Business Objects (duduk dlm MTS)

Tiers 3 :
Oracle 8i

boleh komen ? Terima Kasih....

powered by Black Ball with a green cross !!

IP: 202.188.127.2

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 18 Nov 2000 09:33:06   

gunx:
Ya, saya menggunakan ActiveX EXE server. Saya dah cuba dengan ActiveX DLL, program akan crash. Dokumentasi pun mengatakan begitu, VB ActiveX DLL tidak boleh mencipta thread baru. Kalau projek gunx memerlukan method dipanggil secara asynchronous, saya berpendapat AxtiveX EXE adalah yang terbaik, itupun menggunakan VB 5.(Kalau guna VB6, program akan crash jugak).FYI, satu mesin boleh mempunyai kedua-dua VB6 dan VB5



Only the winners will takes it all...

IP: 202.188.53.55

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 18 Nov 2000 15:15:20   

MOP:
aiseyman, saya m'gunakan VB6. apsal VB6 tak robust pulak nih. poning saya. Tak ada patch ke utk fix the bugs ?

powered by Black Ball with a green cross !!

IP: 202.188.228.39

 jEmBaLanG
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 18 Nov 2000 18:11:09   

Gunx,
dah update to service pack 4?

IP: 202.75.128.12

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 18 Nov 2000 18:38:11   

jembalang:
yup ! saya sudah update ...
cikgu:
jika saya meletakkan 2 Business Object iaitu :
1- User Centric
2- Data Centric
ke dlm MTS, adakah sedikit sebanyak m'pengaruhi performance transaksi. Saya dapati response time pada architecture di atas agak lambat (12 secs !).
Adakah ini merupakan kos lepas jika saya m'gunakan struktur 3-tiers ?



powered by Black Ball with a green cross !!

IP: 202.188.232.128

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 19 Nov 2000 22:19:50   

gunx:
It is not a bugs, Microsoft design it that way. So SP 4 won't fix it.

Only the winners will takes it all...

IP: 203.106.188.63

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 20 Nov 2000 11:56:18   

cikgu:
boleh ke saya buat camni..
saya letakkan semua business logic yg mana aktivitinya hanya berlaku sekali iaitu semasa aplikasi di aktifkan. Cth, loading directori database, warna node, warna link etc, ke dlm DLL dan apabila saya buat perubahan, saya delete dll lama dan saya letakkan dll yg telah diupdate...
adakah program saya boleh mengenali dll yg baru tsbt ?

powered by Black Ball with a green cross !!

IP: 202.188.127.2

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 20 Nov 2000 14:59:10   

gunx:
Terdapat satu konsep yang biasa kita dengar, iaitu plug-in. Aku rasa, kalau hang nak buat macam tu, konsep ini boleh digunakan. Hang cuma perlu tentukan directory dimana DLL tersebut diletakkan. The good news is, it can be done in VB. Aku rasa aku masih ada dokumentasi macamana nak buat dalam VB, nanti kalau ada aku mail kat hang.



Only the winners will takes it all...

IP: 161.142.78.81

 jEmBaLanG
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 20 Nov 2000 15:17:05   

Puppet... aku pun berminat...
letak kat web mana2 ok taks?

jEmBaLanG

IP: 202.75.128.12

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 20 Nov 2000 16:18:04   

cayanggggggggg MOP
bak mai ..tak sabaq nak buat nih ....
mana TukangTaip nih .....??

powered by Black Ball with a green cross !!

IP: 202.188.127.2

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 21 Nov 2000 08:11:20   

Tukangtaip tengah sibuk buat persiapan untuk balik cuti. Lagi 3 hari ni. Tengah siapkan kod-kod yang belum siap dan beli benda-benda yang patut beli.

See you next year insyaAllah.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.33

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 21 Nov 2000 09:56:37   

*tertekan

*mesej ini telah dikemaskini oleh gunx pada 21 Nov 2000 10:02:22*

IP: 202.188.127.2

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 21 Nov 2000 09:56:37   

*tertekan

*mesej ini telah dikemaskini oleh gunx pada 21 Nov 2000 10:03:35*

IP: 202.188.127.2

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 21 Nov 2000 10:00:21   

mmmm....
kali saya nak raise pasal kelebihan ActiveX.EXE(AEXE). Spt yg kita sedia maklum,AEXE apabila diaktifkan akan memgumpukkan alamatnya sendiri dan mampu melakukan proses tanpa menumpang mana-mana alamat proses yg lain. So, kita boleh melakuakan asynrchronous proses dgn AEXE. Saya ada terbaca dlm buku yg mengatakan VB boleh melakukan asynchronous process. (Saya tidak cuba lagi sebenarnya.).Ttp saya tahu saudara MOP pernah membuatnya. FYI, saya ingin m'gunakan teknik proses sedemikan krn program saya m'gandungi proses yg lama. So, saya ingin user tahu progress proses yg sedang berjalan spy tidak frustrated. err...saya masih confuse fungsi sebenar DCOM tuh...adakah ia hanya diletakkan di server? Bagaimana cara nak register AEXE di client? Adakah hanya m'gunakan regsvr32?
Minta tolong cikgu terangkan ....saya dahulukan dgn ucapan terima kasih.......

powered by Black Ball with a green cross !!

IP: 202.188.127.2

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 21 Nov 2000 12:29:18   

satu lagi persoalan saya,
adakah pengunaan RaiseEvents melibatkan overhead yg tinggi ?
Antara tips yg dapat saya kongsi kali ini ialah apabila class anda ditugaskan m'hantar banyak data pada client, seboleh-bolehnya anda 'satu'kan data-data tsbt dan hantar sekali sahaja b'banding anda hantar sikit-sikit tapi berulang kali. Biar banyak hantar tapi round-trip sekali sahaja.
Macam ada longokkan durian dan bapa anda suruh anda letakkan semua durian tsbt ke bangsal berdekatan. Anda ada 2 cara:
1-kutip satu-satu
2-cari kereta sorong dan ambik semua durian masukkan kedlmnya dan hantar sekali.

so...mana pilihan anda ?

powered by Black Ball with a green cross !!

IP: 202.188.127.2

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 01:22:56   

>> Spt yg kita sedia maklum,AEXE apabila diaktifkan akan memgumpukkan alamatnya sendiri dan mampu melakukan proses tanpa menumpang mana-mana alamat proses yg lain. So, kita boleh melakuakan asynrchronous proses dgn AEXE.

Hmm ini tak berapa tepat. Bolehnya sesuatu remote server melakukan pemprosesan secara asynchronous bukan disebabkan oleh kedudukannya didalam addressing space sendiri.

Ianya disebabkan server itu dilarikan dalam process yang berlainan. Bahawa ia duduk dalam ruangan memory yang lain adalah satu akibat daripada pemisahan process ini.

Sebenarnya kalau kita lihat dari dalam-dalam, mekanisme di mana method-method dipanggil adalah berlainan antara local server (DLL) dan remote server (EXE). Remote server sebenarnya mempunyai 'message loop' yang sentiasa berputar dan menerima mesej-mesej (permintaan2 panggilan method) daripada client.

Sebaliknya, dalam local server pula tidak terdapat message loop ini, dan panggilan method dilakukan dengan mencapai terus alamat method tersebut lalu mengarahkan pemprosesan ke tempat itu.

Bezanya di sini, remote server secara aktif menerima permintaan dan memproses permintaan itu. Manakala local server hanya 'duduk diam', dan hanya memberi alamat methodnya untuk diproses oleh client.




¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.33

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 01:29:38   

So, saya ingin user tahu progress proses yg sedang berjalan spy tidak frustrated.

Jika anda sedang menulis ActiveX Control (bukan COM object biasa), anda boleh gunakan events untuk menghantar balik status dari semasa ke semasa.

Jika tidak, anda mungkin perlu gunakan mekanisme lain untuk berkomunikasi dengan client. Satu caranya ialah mengadakan satu method yang dipanggil GetCurrentStatus(), dan method ini akan memulangkan satu string seperti "Doing Process1", "Doing Process2" dsb.

Anda boleh implementasikan lebih kurang begini:

class CObj
{
public:
void AsyncProcess();
void GetCurrentStatus(CString& dest);

CString m_strCurrentStatus;
};

// anggap bahawa ia dipanggil secara async
void CObj:: AsyncProcess()
{
m_strCurrentStatus = "Doing process 1";
// perform processing .. yada yada yada

m_strCurrentStatus = "Doing process 2";
}

void CObj:: GetCurrentStatus(CString& dest)
{
dest = m_strCurrentStatus;
}

Untuk keselamatan, letaklah critical section setiap kali m_strCurrentStatus diubah atau dicapai.


¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.33

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 01:32:22   

>> saya masih confuse fungsi sebenar DCOM tuh...adakah ia hanya diletakkan di server?

objek DCOM ialah objek COM yang diletakkan di komputer asing. Kita kena install komponen DCOM tu ke dalam server, dan dalam komputer client kena install proxy/stub supaya COM tahu yang komponen itu wujud (somewhere out there). Kemudian kena configurekan DCOMConfig, memberikan alamat server tersebut.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 136.1.1.33

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 01:34:58   

Bagaimana cara nak register ActiveX.exe di client? Adakah hanya m'gunakan regsvr32?

Tukangtaip tak pasti apa jawapannya, sebab selama ini semua remote server yang tukangtaip tulis menggunakan exenya sendiri. Tak gunakan activex.exe. Mungkin hanya komponen yang ditulis dengan VB yang memerlukannya.

Tapi untuk menjawab soalan anda, untuk register sesuatu dll kita gunakan regsvr32.

Tapi untuk register exe kita tak gunakan regsvr32. Kita memanggil file exe tersebut dengan satu parameter .. tukangtaip dah lupa, tapi mungkin lebih kurang begini:

C> mycomponent.exe /register

Kemungkinan jawapan kepada soalan anda ialah ini: sudah pasti komponen anda terletak dalam satu dll/ocx (yang dipanggil oleh activex.exe). Maka registerlah dll/ocx itu menggunakan regsvr32. Activex.exe tu rasanya tak perlu register lagi.

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

*mesej ini telah dikemaskini oleh tukangtaip pada 22 Nov 2000 01:36:30*

IP: 136.1.1.33

 jEmBaLanG
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 01:48:24   

TukangTaip..

Untuk keselamatan, letaklah critical section setiap kali m_strCurrentStatus diubah atau dicapai.

saya kurang paham dengan yg dimaksudkan dengan letaklah critil section tuh..

dalam program, macam mana kita nak letak cs tu? kena code ke? kalau kena code boleh kasi contoh?

kalau dah ada function yg disediakan... bagaimana nak 'memanggil' function itu supaya cs dapat dilarikan?

harap dapat menjelaskan ini...


jEmBaLanG

IP: 202.75.128.12

 gunx
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 10:06:22   

aduss malu-malu..salah bagi fakta !
nasib baik cikgu betulkan kalau tidak saya dah jadi penyebar ajaran sesat!



powered by Black Ball with a green cross !!

IP: 202.188.127.2

 tukangtaip
 Ahli Setia
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 11:55:28   

Critical section

Tukangtaip beri contoh dalam Visual C++ sebab tukangtaip tak tahu implementasinya dalam VB (kalau ada?).


int nImportantData = 0;
CCriticalSection csImportantData;
UINT Func1(void *pParam)
{
CSingleLock kunci(&csImportantData);

kunci.Lock(); // mula menggunakan nImportantData
nImportantData = nImportantData + 1;
kunci.Unlock(); // dah habis menggunakan nImportantData.

}

UINT Func2(void *pParam)
{

CSingleLock kunci(&csImportantData);

kunci.Lock(); // mula menggunakan nImportantData
nImportantData = nImportantData - 1;
kunci.Unlock(); // dah habis menggunakan nImportantData.

}

void main()
{
AfxBeginThread(Func1, NULL);
AfxBeginThread(Func2, NULL);

Sleep(1000); // tidur 1 saat supaya semua thread habis dulu
}

¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸

IP: 209.252.121.150

 MasterPuppet
 Ahli
 Email | Cari Mesej
dimasukkan pada: 22 Nov 2000 13:55:36   

gunx,jEmBaLang:
Sorry le beberapa hari ni aku busy, tak sempat nak LogIn. Pasal plugin tu, mungkin besok atau lusa aku mail kasi kat hang. Sekarang ni aku di kolej.

Dalam skop VB, hanya ActiveX EXE sahaja yang boleh buat asynchronous call, dalam C++ dan J++, DLL pun boleh buat asynchronous call sebab C++ dan J++ membenarkan Free Model Threading dalam DLLnya, tak macam VB.

Untuk membolahkan kita meng-install-kan ActiveX EXE di mesin client, kita perlu click Remote Server file di Project Properties Dialog Box. Ini akan menghasilkan file *.vbr dan *.tlb. Semasa kita distribute application kita(yang akan memanggil remote component kita), masukkan sekali kedua-dua file tersebut dan ditambah dengan file clireg32.exe. Kalau takde dalam system, boleh dapatkan didalam CD MS Studio. File ini akan kita gunakan unutk configure remote server kita di client. Kita kena berikan beberapa parameter kepada clireg32.exe semasa nak install atau uninstall remote server component, lebh kurang macam regsvr32.exe. Parameternya aku dah lupa, nanti petang nanti aku balik rumah aku check, esok aku postkan.

Untuk register ActiveX EXE di server pulak, senang je, click dua kali pada file tersebut(*.exe)..you're done.

Tentang overhead untuk RaiseEvent tu, aku tak berapa sure. Tetapi, untuk menggunakan RaiseEvent sebagai asynchronous notification, kedua-dua client dan server mesti di-install DCOM and configured properly. Jika susah nak buat macam tu, cadangan tukangtaip adalah cara penyelesaiannya.

Ok, chioww ...aku ade kelas lepas ni.

p/s:
gunx, bukak part 6 pulak la.

Only the winners will takes it all...

*mesej ini telah dikemaskini oleh MasterPuppet pada 22 Nov 2000 14:16:46*

IP: 161.142.78.81

Hantar topik baru | jawab mesej ini Pengendali sahaja: kunci topik | padam topik

Sembang.com >> Sembang-Komputer >> VB : mari belajar membuat COM ( siri 5 )

Masa pemprosesan: 57.908124 saat.


Sembang.com | Senarai sembang | Tolong! | Daftar | Lupa password | Kemaskini biodata | Logout

Melayu.com | Melayu.net | Sekolah.com | MyPHP

Di sini semuanya original. Sesiapa meniru tanpa kebenaran adalah orang yang sangat jahat.
©1998-2000 selemann is not salesman