Dimasukkan oleh:
|
Topik: VB : mari belajar
membuat COM ( siri 5 ) |
gunx
Ahli Setia |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
dimasukkan pada:
18 Nov 2000 18:11:09
Gunx, dah update to service pack 4?
IP:
202.75.128.12 |
gunx
Ahli Setia |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |  |
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 |
|