Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
+44
buuhuynh
NguyenTheNam
tranlamxuanhang_107H1029
vhoanghung
TuongVi
diemai
DVD_duynt
toilatoi0285
buiquangthoi
trandinhnghia
thuydung02cm_08H1010019
nhu_nhu
khanh.nd_08H1010044
huynhloitrinh
TruongVanHieu_08H1010030
hochdh
seaman
sonvo
asmking
Thuy Trang
DangQuocCuong107H1010
phamquangminh
caynamnho
trang_tg
nguyenminhchung
VANTHIQUOCVU
khangbui
mylinh
tranlebaolong
linhthy
rama0901
PhamThiKhanhHa
nguyentrungchanh
diemphucnguyen
lethaibaochau
mymy
ntddx
hongntt
phamvietthanh
duongbaphuc
vothuynga
nvhung_107H1040
hienminhchau2005
lqhlam
48 posters
Trang 2 trong tổng số 3 trang
Trang 2 trong tổng số 3 trang • 1, 2, 3
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Sự tích tụ kiến thức, tích tụ - tích tụ
Mong là lớp chúng ta sẽ thi tốt.
Thanks thầy Tô Tuấn và các bạn nhiều lắm
Thầy ơi mong thầy ra đề dễ dễ nha, hihihi
Mong là lớp chúng ta sẽ thi tốt.
Thanks thầy Tô Tuấn và các bạn nhiều lắm
Thầy ơi mong thầy ra đề dễ dễ nha, hihihi
caynamnho- Tổng số bài gửi : 22
Join date : 20/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Minh dang can tham khao phan nay, cam on ban nhieu.
phamquangminh- Tổng số bài gửi : 22
Join date : 19/02/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Đáp ứng yêu cầu của một bạn,mình post thêm phần PeerA vaf PeerB nè
PeerA nè
‘** Code trong Module1:
Public Const HWND_TOPMOST = -1
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const SWP_SHOWWINDOW = &H40
Public Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
‘** Code trong PeerA:
Private Sub Form_Load()
With udpPeerA ‘ Tên điều khiển WinSock
.RemoteHost = "LocalHost" ‘ Tên máy hay IP
.RemotePort = 2001 ‘ Số hiệu cổng của PeerB
.Bind 2002 ‘ Số hiệu cổng của PeerA
End With
End Sub
Private Sub txtSend_Change()
‘ Thöïc hieän moãi khi ngöôøi duøng goõ vaøo hoäp [Göûi]
On Error Resume Next
udpPeerA.SendData txtSend.Text
End Sub
Private Sub udpPeerA_DataArrival(ByVal bytesTotal As Long) ‘ Khi coù döõ lieäu göûi ñeán töø PeerB
On Error Resume Next
Dim strData As String
udpPeerA.GetData strData
txtReceive.Text = strData ‘ Tin nhaän ñöôïc -> [Nhaän]
‘ Hieän cöûa soå PeerA
Me.WindowState = vbNormal
Me.SetFocus ‘ Ñaët tieâu ñieåm vaøo form hieän thôøi
‘ Ñöa cöûa soå PeerA leân treân caùc cöûa soå khaùc
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE ‘ Goïi haøm API
End Sub
PeerB nè
‘** Code trong PeerB:
Private Sub Form_Load()
With udpPeerB ‘ Teân ñieàu khieån WinSock
.RemoteHost = "LocalHost" ‘ Teân Maùy hay IP
.RemotePort = 2002 ‘ Soá hieäu Coång cuûa PeerA
.Bind 2001 ‘ Soá hieäu Coång cuûa PeerB
End With
End Sub
Private Sub txtSend_Change()
‘ Thöïc hieän moãi khi ngöôøi duøng goõ vaøo hoäp [Göûi]
On Error Resume Next
udpPeerB.SendData txtSend.Text
End Sub
Private Sub udpPeerB_DataArrival (ByVal bytesTotal As Long)
Dim strData As String
udpPeerB.GetData strData
txtReceive.Text = strData ‘ Tin nhaän ñöôïc -> [Nhaän]
End Sub
Chúc may mắn ha.
PeerA nè
‘** Code trong Module1:
Public Const HWND_TOPMOST = -1
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const SWP_SHOWWINDOW = &H40
Public Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
‘** Code trong PeerA:
Private Sub Form_Load()
With udpPeerA ‘ Tên điều khiển WinSock
.RemoteHost = "LocalHost" ‘ Tên máy hay IP
.RemotePort = 2001 ‘ Số hiệu cổng của PeerB
.Bind 2002 ‘ Số hiệu cổng của PeerA
End With
End Sub
Private Sub txtSend_Change()
‘ Thöïc hieän moãi khi ngöôøi duøng goõ vaøo hoäp [Göûi]
On Error Resume Next
udpPeerA.SendData txtSend.Text
End Sub
Private Sub udpPeerA_DataArrival(ByVal bytesTotal As Long) ‘ Khi coù döõ lieäu göûi ñeán töø PeerB
On Error Resume Next
Dim strData As String
udpPeerA.GetData strData
txtReceive.Text = strData ‘ Tin nhaän ñöôïc -> [Nhaän]
‘ Hieän cöûa soå PeerA
Me.WindowState = vbNormal
Me.SetFocus ‘ Ñaët tieâu ñieåm vaøo form hieän thôøi
‘ Ñöa cöûa soå PeerA leân treân caùc cöûa soå khaùc
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE ‘ Goïi haøm API
End Sub
PeerB nè
‘** Code trong PeerB:
Private Sub Form_Load()
With udpPeerB ‘ Teân ñieàu khieån WinSock
.RemoteHost = "LocalHost" ‘ Teân Maùy hay IP
.RemotePort = 2002 ‘ Soá hieäu Coång cuûa PeerA
.Bind 2001 ‘ Soá hieäu Coång cuûa PeerB
End With
End Sub
Private Sub txtSend_Change()
‘ Thöïc hieän moãi khi ngöôøi duøng goõ vaøo hoäp [Göûi]
On Error Resume Next
udpPeerB.SendData txtSend.Text
End Sub
Private Sub udpPeerB_DataArrival (ByVal bytesTotal As Long)
Dim strData As String
udpPeerB.GetData strData
txtReceive.Text = strData ‘ Tin nhaän ñöôïc -> [Nhaän]
End Sub
Chúc may mắn ha.
lqhlam- Tổng số bài gửi : 90
Join date : 17/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Dung la thu minh dang can. Cam on ban nhe!
phamquangminh- Tổng số bài gửi : 22
Join date : 19/02/2009
Thanks!
Cám ơn vì bạn đã chịu khó ngồi soạn như thế này cho cả lớp.
Nhưng đến giờ đọc lại vẫn còn 1 số câu lệnh chưa hiểu được.
Thời gian tới chắc phải cố gắng hơn nữa. (Mà có ai nhận kèm riêng k0 ta?)
Nhưng đến giờ đọc lại vẫn còn 1 số câu lệnh chưa hiểu được.
Thời gian tới chắc phải cố gắng hơn nữa. (Mà có ai nhận kèm riêng k0 ta?)
Thuy Trang- Tổng số bài gửi : 25
Join date : 22/02/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Để mình giải thích lại kỹ hơn cho các bạn hiểu, đầu tiên là phần Thực thi vấn đề "Sản xuất - Tiêu thụ" :
_ in, out là con trỏ chỉ vị trí của nhà sản xuất & nhà tiêu thụ (in : nhà sản xuất, out : nhà tiêu thụ).
_ while (((in + 1) % BUFFER_SIZE) == out); -> Lặp vô hạn định cho đến khi buffer có chỗ trống
_ in = (in + 1) % BUFFER_SIZE; -> Đoạn code này chính là Giải pháp duy trì tối đa (BUFFER_SIZE - 1) sản phẩm cùng một lúc trong bộ đệm.
_ SuspendThread(GetCurrentThread()); -> Tạm dừng luồng hiện tại (ở đây chính là nhà sản xuất đang chạy đoạn code này) vô hạn định.
_ while(in == out); -> Lặp vô hạn cho đến khi có sản phẩm trong buffer
_ out = (out + 1) % BUFFER_SIZE; -> Đoạn code này chính là Giải pháp duy trì tối đa (BUFFER_SIZE - 1) sản phẩm cùng một lúc trong bộ đệm.
_ Sleep(GetTickCount()%5000); -> Cho nhà tiêu thụ ngủ trong thời gian <= 5s, hàm GetTickCount() là để lấy thời gian bắt đầu từ lúc OS khởi động cho đến thời điểm gọi hàm (ms).
_ Đây là đoạn code chính của chương trình(luồng chính).
_ Số 4 được gán vào tham số thứ 5 của hàm CreateThread() chính là để báo luồng sau khi được tạo sẽ bị đưa vào trạng thái ngủ(chắc là ngủ vô hạn nếu không bị đánh thức ).
_ Tất cả các tham số của hàm CreateThread() đã được giải thích kỹ ở trang 1 rồi, các bạn tham khảo lại nha.
_ Số 0 được gán vào tham số thứ 5 của hàm CreateThread() chính là để báo luồng sau khi được tạo sẽ được thi hành ngay.
_ 2 luồng tiêu thụ được tạo dù được thi hành ngay cũng sẽ chờ vô hạn ở tại vòng lặp while (in == out); bởi vì lúc này trong buffer chưa có sản phẩm nào ( 2 luồng sản xuất vừa được tạo đã được cho ngủ ngay mà, đúng ko )
_ ResumeThread() dùng để đánh thức luồng đang ngủ.
_ Nhấn 0 để kết thúc chương trình, lúc này ta sẽ kết thúc tất cả các NSX & NTT để giải phóng bộ nhớ mà OS dành cho chúng.
_ Sleep(1); -> Phải cho chương trình ngủ 1s trước khi chạy đoạn code ShowBuffer(); để tránh việc hiển thị sai Buffer (do các luồng của NSX & NTT chưa kịp thực thi xong mà Buffer đã được in ra, chỗ này ta cho ngủ 1s là để đề phòng). Mình cảm thấy đoạn code này chính là chỗ chưa hay lắm của giải pháp này
- Code:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define BUFFER_SIZE 10
- Code:
int buffer[BUFFER_SIZE];
int in=0;
int out=0;
_ in, out là con trỏ chỉ vị trí của nhà sản xuất & nhà tiêu thụ (in : nhà sản xuất, out : nhà tiêu thụ).
- Code:
int nextProduced=1; // biến nextProduced chứa nội dung của món hàng tiếp theo, khởi tạo là 1
void Producer(){
while (1){
// ... Sản xuất (nextProduced)
while(((in+1)%BUFFER_SIZE)==out);
buffer[in]=nextProduced++;
in=(in+1)%BUFFER_SIZE;
SuspendThread(GetCurrentThread());
}
}
_ while (((in + 1) % BUFFER_SIZE) == out); -> Lặp vô hạn định cho đến khi buffer có chỗ trống
_ in = (in + 1) % BUFFER_SIZE; -> Đoạn code này chính là Giải pháp duy trì tối đa (BUFFER_SIZE - 1) sản phẩm cùng một lúc trong bộ đệm.
_ SuspendThread(GetCurrentThread()); -> Tạm dừng luồng hiện tại (ở đây chính là nhà sản xuất đang chạy đoạn code này) vô hạn định.
- Code:
void Consumer(){
int nextConsumed;
while (1){
while(in==out);
nextConsumed=buffer[out];
out=(out+1)%BUFFER_SIZE;
// ... Tiêu thụ (nextConsumed)
Sleep(GetTickCount()%5000);
}
}
_ while(in == out); -> Lặp vô hạn cho đến khi có sản phẩm trong buffer
_ out = (out + 1) % BUFFER_SIZE; -> Đoạn code này chính là Giải pháp duy trì tối đa (BUFFER_SIZE - 1) sản phẩm cùng một lúc trong bộ đệm.
_ Sleep(GetTickCount()%5000); -> Cho nhà tiêu thụ ngủ trong thời gian <= 5s, hàm GetTickCount() là để lấy thời gian bắt đầu từ lúc OS khởi động cho đến thời điểm gọi hàm (ms).
- Code:
void ShowBuffer(){ // In nội dung Buffer
...
}
_ Đây là đoạn code chính của chương trình(luồng chính).
- Code:
int main(){
HANDLE ProducerHandle1, ProducerHandle2;
HANDLE ConsumerHandle1, ConsumerHandle2;
DWORD ProducerID1, ProducerID2;
DWORD ConsumerID1, ConsumerID2;
- Code:
// Tạo 2 luồng sản xuất trong trạng thái ngủ
ProducerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer,
0, 4, &ProducerID1);
ProducerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer,
0, 4, &ProducerID2);
_ Số 4 được gán vào tham số thứ 5 của hàm CreateThread() chính là để báo luồng sau khi được tạo sẽ bị đưa vào trạng thái ngủ(chắc là ngủ vô hạn nếu không bị đánh thức ).
_ Tất cả các tham số của hàm CreateThread() đã được giải thích kỹ ở trang 1 rồi, các bạn tham khảo lại nha.
- Code:
// Tạo 2 luồng Tiêu thụ thi hành ngay
ConsumerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer,
0, 0, &ConsumerID1);
ConsumerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer,
0, 0, &ConsumerID2);
_ Số 0 được gán vào tham số thứ 5 của hàm CreateThread() chính là để báo luồng sau khi được tạo sẽ được thi hành ngay.
_ 2 luồng tiêu thụ được tạo dù được thi hành ngay cũng sẽ chờ vô hạn ở tại vòng lặp while (in == out); bởi vì lúc này trong buffer chưa có sản phẩm nào ( 2 luồng sản xuất vừa được tạo đã được cho ngủ ngay mà, đúng ko )
- Code:
while(1){
printf("\n- Nhấn P/p để sản xuất, 0 để kết thúc:”);
switch (getch()){
case 'P':
ResumeThread(ProducerHandle1);
break;
case 'p':
ResumeThread(ProducerHandle2);
break;
case '0':
CloseHandle(ProducerHandle1);
CloseHandle(ProducerHandle2);
CloseHandle(ConsumerHandle1);
CloseHandle(ConsumerHandle2);
return 0;
}
Sleep(1);
ShowBuffer();
}
}
_ ResumeThread() dùng để đánh thức luồng đang ngủ.
_ Nhấn 0 để kết thúc chương trình, lúc này ta sẽ kết thúc tất cả các NSX & NTT để giải phóng bộ nhớ mà OS dành cho chúng.
_ Sleep(1); -> Phải cho chương trình ngủ 1s trước khi chạy đoạn code ShowBuffer(); để tránh việc hiển thị sai Buffer (do các luồng của NSX & NTT chưa kịp thực thi xong mà Buffer đã được in ra, chỗ này ta cho ngủ 1s là để đề phòng). Mình cảm thấy đoạn code này chính là chỗ chưa hay lắm của giải pháp này
asmking- Tổng số bài gửi : 137
Join date : 19/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Cam on ban nhieu nhe
sonvo- Tổng số bài gửi : 6
Join date : 07/05/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Thanks bạn nhiều nhé, những thông tin của bạn hữu ích.
seaman- Tổng số bài gửi : 33
Join date : 23/02/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Cam on ban rat rat la nhieu, nhung ma khong biet la co hoc kip khong nua ta! Du sao cung chuc moi nguoi thi tot !!!
hochdh- Tổng số bài gửi : 41
Join date : 10/05/2009
Thanks
Cảm ơn tất cả mọi người nhiều lắm!!!!
Nhưng T4 thầy đâu chỉ hỏi code không thôi đâu, có lý thuyết nữa mà.
Nhưng T4 thầy đâu chỉ hỏi code không thôi đâu, có lý thuyết nữa mà.
TruongVanHieu_08H1010030- Tổng số bài gửi : 67
Join date : 23/03/2009
Age : 38
Đến từ : TP.HCM
Thanks
Thanks nhiều !
Bạn còn chiêu nào post lên hết luôn nhe !
Bạn ghi chi tiết đấy, đọc dễ hiểu thật.
Bạn còn chiêu nào post lên hết luôn nhe !
Bạn ghi chi tiết đấy, đọc dễ hiểu thật.
khanh.nd_08H1010044- Tổng số bài gửi : 38
Join date : 08/04/2009
Age : 41
Đến từ : TP. Hồ Chí Minh
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Các bạn ơi sao thấy lo wá àh !!!!
Bài thì nhiều nữa !!!!
Mong Thầy "nhẹ tay " với tụi mình !!!!
Bài thì nhiều nữa !!!!
Mong Thầy "nhẹ tay " với tụi mình !!!!
nhu_nhu- Tổng số bài gửi : 10
Join date : 07/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
vothuynga đã viết:cam on be nhieu nhe, chi chep moi ca tay, chuc be thi tot nhe
thuydung02cm_08H1010019- Tổng số bài gửi : 41
Join date : 27/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
cam on ban.nhung sao toan la code ko vay?
trandinhnghia- Tổng số bài gửi : 47
Join date : 16/04/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
[Cám ơn bạn nhiều nhé
buiquangthoi- Tổng số bài gửi : 10
Join date : 19/02/2009
Age : 40
Đến từ : Bến Tre
Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
tks nhieu, co gang hieu het nhe cac ban,thay da dan khong can hoc thuoc long, chi can hieu code la ok, chuc moi nguoi thi tot, pass het
toilatoi0285- Tổng số bài gửi : 45
Join date : 28/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Thanks ,
and
Chúc cả lớp thi tốt trong đợt này .
and
Chúc cả lớp thi tốt trong đợt này .
DVD_duynt- Tổng số bài gửi : 43
Join date : 26/02/2009
Age : 40
Đến từ : HCM
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Minh cam on may ban nhe.
Ban noi la thi giua ky khong can nho code dung 100%, nghia la minh phai co doan code san va tu giai thich y nghia tung dong lenh va cong viec cua doan code la gi dung ko?
Roi bai den hieu thi sao?
Minh cam on nhe
Diem Ai
Ban noi la thi giua ky khong can nho code dung 100%, nghia la minh phai co doan code san va tu giai thich y nghia tung dong lenh va cong viec cua doan code la gi dung ko?
Roi bai den hieu thi sao?
Minh cam on nhe
Diem Ai
diemai- Tổng số bài gửi : 5
Join date : 29/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Chúc cả nhà tai qua nạn khỏi . hi hi
TuongVi- Tổng số bài gửi : 30
Join date : 26/02/2009
Hi vọng tối nay mọi người có thể vượt qua kỳ này
Với những tài liệu các bạn đã post lên như thế này thì mình nghĩ mọi người có thể past kỳ kiểm tra giữa kỳ này. Chúc Các bạn thành công!
vhoanghung- Tổng số bài gửi : 76
Join date : 19/03/2009
Age : 39
Đến từ : Ho Chi Minh
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
_ Chưa thầy ơi, năm ngoái em không đi học đầy đủ nên đâu có dám đi thi vì biết có đi cũng vậy
Admin:
- Thi giữa kỳ không đòi hỏi nhớ code đúng 100%, chỉ cần trình bày khái quát !
- Mà sao tưởng AsmKing qua được môn này rồi mà?
_ Nhưng dù sao cũng hay vì năm nay đi học lại (nói là học lại nhưng cũng như là học từ đầu rồi) mới thấy có quá nhiều thứ cần phải biết thêm, quả thật môn HĐH này của thầy kiến thức rộng quá, học cho đủ hết cũng đã mệt rồi chứ chưa nói việc chuyên sâu vào một phần nào đó
_ Em rất cám ơn thầy vì vụ thi giữa kỳ năm nay
asmking- Tổng số bài gửi : 137
Join date : 19/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
Cam on ban nhieu,minh dang can nhung bai nay.
tranlamxuanhang_107H1029- Tổng số bài gửi : 25
Join date : 23/03/2009
Re: Câu hỏi và đáp án cho thứ tư thi nè!!!!!!!!!!
dung thu minh can.cam on cac ban nhiu nhe
NguyenTheNam- Tổng số bài gửi : 31
Join date : 21/02/2009
Trang 2 trong tổng số 3 trang • 1, 2, 3
Trang 2 trong tổng số 3 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết