Hoc Tap

Learning
 
HomeHome  FAQFAQ  SearchSearch  RegisterRegister  Log inLog in  
 

Thao luan (lop TH06A1)

View previous topic View next topic Go down 
Goto page : Previous  1, 2, 3, 4, 5, 6  Next
AuthorMessage
To Tuan
Admin



Age : 53
Joined : 08 May 2007
Posts : 191

PostSubject: De Windows khoi dong nhanh hon   1/12/2007, 14:31

Bạn Ngô Hà Hoàng Thanh đă có loạt bài tốt và đúng hướng về những thủ thuật với Windows.

Thày chia sẻ thêm về cách khởi động Windows nhanh:

Thông thường, trước khi tắt máy, ta thực hiện lệnh Shutdown.

Nếu thay v́ Shutdown cho hệ thống chuyển sang Ngủ đông (Hibernate), th́ khi bật máy lại, Windows sẽ "Thức dậy" nhanh hơn.

Hibernate mạnh hơn Standby v́ đưa toàn bộ nội dung RAM ra đĩa cứng để khôi phục lại nguyên xi khi được đánh thức.

Các em thảo luận thêm về cách làm này.
Back to top Go down
dtsang




Age : 20
Joined : 17 Sep 2007
Posts : 8

PostSubject: SXTT_Remote   2/12/2007, 23:58

Ḿnh đă làm thử bài SXTT điều khiển từ xa,nên ḿnh post lên để các bạn tham khảo.
1/H́nh minh họa
2/Link để download source code
3/Giải thích

Hướng đẫn :
1/Bấm vào Link sau để xem h́nh minh họa : http://www.servimg.com/image_preview.php?i=2&u=11623492


2/Link download : SXTT_Remote.zip
Nếu link die th́ các bạn vui ḷng down ở BT_HDH

3/Giải thích code: sao cho để 2 chương tŕnh Remote và SXTT liên lạc với nhau,c̣n phần code c̣n lại chắc các bạn đă biết g̣i
***CODE trong Remote:
- static int PortNumber = 2003; //Tạo biến PortNumber kiểu int,có gtri là 2003.
- UdpClient udpClient = new UdpClient(PortNumber); // Tạo mới udpClient có cổng là 2003.
- Byte[] sendBytes = Encoding.UTF8.GetBytes("P1"); // Chuyển thông điệp "P1" cần gửi sang mảng Byte
- udpClient.Connect(txtRemoteHost.Text, 2000); // tạo kết nối với máy tính có cổng 2000,và có địa chỉ IP nằm trong textbox tên txtRemoteHost
- udpClient.Send(sendBytes, sendBytes.Length); //Gửi thông điệp đi
- udpClient.Close(); //đóng udpClient hiện tại
- udpClient = new UdpClient(PortNumber); // Tạo mới udpClient có cổng là 2003

***Code trong SXTT :
- static int PortNumber = 2000; // tạo biến PorrtNumber kiểu int , có giá trị 2000
- UdpClient udpClient = new UdpClient(PortNumber); // tạo udpClient mới có cổng là 2000
- Thread receiveThread; //tạo biến receiveThread kiểu luồng
- Form frm; // tạo biến frm kiểu form
- Hàm SetTextCallback : cho phép từ 1 luồng sửa được nội dung form bất ḱ
- receiveThread = new Thread(new ThreadStart(ReceiveData)); // tao luồng mới dựa trên việc khởi động luồng mới được gọi từ hàm ReceiveData
- receiveThread.IsBackground = true; // cho luồng hoạt động ở chế độ nền
- receiveThread.Start(); //khởi động luồng
- IPEndPoint RemoteIpEndPoint; //IPEndPoint object will allow us to read datagrams sent from any source.
- RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); //RemoteIpEndPoint dùng để lưu địa chỉ IP của máy gửi yêu cầu
- Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); //udpClient nhận thông điệp từ máy có IP lưu trong RemoteIpEndPoint và đưa vào mảng receiveBytes
- string returnData = Encoding.UTF8.GetString(receiveBytes); // chuyển nội dung thông điệp sang dạng string
- SetText(returnData, RemoteIpEndPoint.Address.ToString()); // Đưa nội dung của Dữ liệu nhận được vào ô textbox tên textReceive và Địa chỉ IP nơi gửi vào ô textbox tên txtRemoteHost
------------------------------------------------
MSSV: 10660225
Mục Quản : 53
Tên : Dương Thanh Sang
------------------------------------------------


Last edited by on 4/12/2007, 11:05; edited 1 time in total
Back to top Go down
dtsang




Age : 20
Joined : 17 Sep 2007
Posts : 8

PostSubject: TaiLieuThucHanh_HDH   3/12/2007, 00:24

Trong quá tŕnh thực hành ḿnh đă tích lũy được tất cả tài liệu từ trước tới giờ. Bạn nào muốn tham khảo th́ bấm vào link này : BT_HDH.zip
hoặc link này http://www.mediafire.com/?0obz0p4z6mb
----------------------------------------------------------
MSSV: 10660225
Mục Quản : 53
Tên : Dương Thanh Sang
----------------------------------------------------------


Last edited by on 4/12/2007, 11:04; edited 1 time in total
Back to top Go down
sgialong




Age : 20
Joined : 02 Dec 2007
Posts : 7
Localisation : Mục Quản của em là 51-MSSV:10660175-TH06A1

PostSubject: hibernate có nên dùng ko??   3/12/2007, 00:43

Để kích hoạt chức năng Hibernate (ngủ đông), bạn phải tiến hành các bước tuần tự sau: vào menu Start\Settings\Control Panel>Power Options (hoặc chuột phải lên desktop nhấp chuột vào property chọn screen saver chọn tiếp power option sẽ thấy tab hibernate) , đánh dấu chọn Enable hibernation trong thẻ Hibernate của hộp thoại Power Options Properties, rồi nhấn OK. Tiếp đến, nhấn Start, chọn Turn Off Computer, nhấn nút Hibernate.
Thường một số máy là nút Standby nên khi nhấn Start, chọn Turn Off Computer, nhấn đè phím Shift để nút Standby biến thành nút Hibernate.Nếu bạn muốn bỏ hẳn thao tác "ấn Shift" cũng như muốn nút Hibernate trở thành mặc định th́ cách sau đây là giải pháp tối ưu:
- Dùng chương tŕnh Notepad (có sẵn trong Windows) để tạo 1 file với tên bất kỳ nhưng phần mở rộng (extension) phải là *.reg, nội dung như sau:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
\Services\ACPI\Parameters]
"AMLIMaxCTObjs"=hex:04,00,00,00
"Attributes"=dword:00000070
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
\Services\ACPI\Parameters\WakeUp]
"FixedEventMask"=hex:20,05
"FixedEventStatus"=hex:00,84
"GenericEventMask"=hex:18,50,00,10
"GenericEventStatus"=hex:10,00,ff,00
- Sau khi tạo xong, bạn nhấn đúp chuột lên file này, xuất hiện thông báo hỏi bạn có muốn "add" nội dung này vào Registry không, bạn hăy nhấn Yes để đồng ư, nhấn tiếp nút OK để xác nhận hoàn tất thành công. Bạn hăy khởi động lại máy tính và sẽ thấy Standby đă bị biến thành Hibernate.
Chú ư là muốn chạy được chức năng Hibernate th́ dung lượng trống ổ C: ít nhất phải gấp đôi dung lượng bộ nhớ Ram.Máy nào cũng có 4 chế độ: Shutdown, Restart, Standby và Hibernate,không phải phần cứng của máy nào cũng hỗ trợ tốt cả bốn chế độ trên, nhất là chế độ Standby và Hibernate. Nếu phần cứng máy không hỗ trợ mà người dùng vẫn yêu cầu máy thực hiện chế độ tương ứng th́ kết quả sẽ không thể tiên đoán trước.
Chế độ Hibernate là máy lưu trạng thái làm việc hiện hành lên đĩa cứng rồi tắt toàn bộ các thành phần (y như Shutdown). Mỗi khi cần chạy lại (thoát khỏi chế độ Hibernate), máy sẽ hoạt động và nạp toàn bộ trạng thái làm việc lần cuối vào RAM rồi hoạt động tiếp từ trạng thái đó (giống như bạn bị chích thuốc mê một thời gian rồi được giải thuốc mê). Chế độ Hibernate thích hợp khi bạn muốn dừng làm việc nhưng không muốn mất trạng thái làm việc hiện hành (v́ c̣n quá bề bộn nên không muốn dọn dẹp trước khi tắt máy).
Và nếu bạn xài Hibernate th́ lúc tắt máy bạn 0 cần close các chương tŕnh đang chạy, mà cứ cho Hibernate luôn, khi mở PC lên, th́ các chương tŕnh vẫn c̣n sẵn trên màn h́nh, 0 cần mở lại. Như vậy bạn sẽ nhớ lần trước bạn đă làm tới bước nào.
Từ lúc có máy đến giờ ḿnh toàn sử dụng chức năng này. Nhưng sử dụng chức năng này th́ một số người nói sẽ làm giảm tuổi thọ của RAM , một số người th́ nói th́ ko,nên qua bài này mong được ư kiến của thầy có nên dùng ko? Em công nhận là tắt máy nhanh thật .trong ṿng 3 giây là máy tính tắt liền.
Hoặc các bạn mở Notepad tạo thêm 1 file save với tên là .bat :
gơ shutdown -s -t 01 , file này giúp ta shutdown nhanh hơn b́nh thường nhưng vẫn ko = hibernate.
************************************************************
MSSV: 10660175
Mục Quản: 51
Back to top Go down
TTThao




Age : 21
Joined : 11 Sep 2007
Posts : 237

PostSubject: Re: Thao luan (lop TH06A1)   3/12/2007, 01:27

Thank cậu Sang hen!
Cậu Long thức khuya nhở!
_________________
Hăy tương trợ lẫn nhau, gánh nặng và tật xấu nhờ đó mà giảm đi!
http://360.yahoo.com/anhchanghieuhoc2002
Diễn đàn đang tham gia: http://dayhocintel.org; http://www.dayhoctructuyen.org; bachkim.vn;...
Back to top Go down
To Tuan
Admin



Age : 53
Joined : 08 May 2007
Posts : 191

PostSubject: Ban Song Gia Long viet tot ve Hibernate   3/12/2007, 09:19

Bạn Sông Gia Long đă ứng dụng Hibernate rất hiệu quả.

Bạn c̣n viết tốt nữa.

Không sợ "hao" RAM v́ ta tắt hẳn nguồn mà, có khi lại đỡ hao máy đấy.

Nói hao RAM th́ cũng như sợ CPU "nóng" quá khi dùng hết công suất.

Giả sử có giảm tuổi thọ của 2 thiết bị trên, th́ cũng đáng làm v́ có lợi cho ḿnh: Shutdown và Resume nhanh, Giữ được trạng thái làm việc gần nhất (nên không "hao người")

Bạn Long nên soạn tập tin HibernateSetup.reg cho chuẩn để mọi người dùng, khỏi sai sót, đỡ nguy hiểm.

Nếu ai muốn làm, nên dùng Regedit để vào đặt lại bằng tay, an toàn hơn.

Registry là cả đề tài hay, nên nghiên cứu cho trọn vẹn.

Chúc các em thành công !
Back to top Go down
To Tuan
Admin



Age : 53
Joined : 08 May 2007
Posts : 191

PostSubject: Re: Thao luan (lop TH06A1)   3/12/2007, 09:35

Bạn Dương Thanh Sang hiểu rất trong sáng Giải pháp C# của Bài toán SXTT điều khiển từ xa.

Mọi thứ đều đơn giản như vậy, chỉ có chúng ta là rắc rối thôi.

Einstein thường nhắc: Hăy đơn giản, đơn giản tới mức có thể !

Chú ư: Đơn giản không có nghĩa là Giản đơn, v́ đơn giản đ̣i hỏi hiểu vấn đề rất sâu sắc, tới cùng.

Bạn Sang không cần quan tâm đến hàm đại diện SetTextCallBack, mà chỉ thấy đây đơn thuần là thủ tục cần thực hiện để có thể sửa nội dung Form bất kỳ từ một luồng (Microsoft nói là cách làm này là để đảm bảo "An toàn luồng - Thread-Safe")

Có một cải tiến hiệu quả: Thay v́ khai báo Form frm, hăy dùng frmUdpPeerClient frm, nghĩa là biến frm sẽ chứa form cụ thể thuộc loại frmUdpPeerClient.

Nhờ đó, trong SetText, sửa các textBox sẽ đơn giản hơn:

this.frm.txtReceive.Text = text1
this.frm.txtRemoteHost.Text = text2

Ngay khi soạn code, sau khi nhập this.frm., hệ sẽ hiển thị menu tắt cho ta chọn tiếp tên textbox cần.


Chúc các em thành công !


Last edited by on 4/12/2007, 09:02; edited 2 times in total
Back to top Go down
htnhan




Joined : 19 Sep 2007
Posts : 4

PostSubject: cướp lại quyền &#   3/12/2007, 15:27

Có khi nào các bạn mở IE lên mà nó không load trang do ḿnh chỉ định trong Internet Options nhưng lại mở ra 1 trang hoàn toàn xa lạ; khi bạn search địa chỉ trên thanh address nhưng không t́m thấy hoặc kẹt mạng nó lại mở đến 1 trang t́m kiếm xa lạ (không phải google hay yahoo) ??? Đáp án là máy bạn đă bị các phần mềm sửa đổi trang chủ và trang t́m kiêm mặc định phá hoại. Các bạn có thể làm 1 số cách như sau :
- Vào lệnh Run nhấn Regedit rồi Enter. Vào HKEY_CURRENT_USER\Contr-ol Panel\don't load, nếu có tập tin inetcpl.cpl th́ hăy xoá nó và log off ra.
- Search trên ổ cứng các tập tin có đuôi *.hta hoặc *.js, nếu có hăy mở các tập tin đó bằng Notepad và t́m đường dẫn nơi bạn đă bị xâm nhập. Xoá tất cả các tập tin tới đường dẫn đó. Đồng thời cũng xóa các tập tin *.tmp trên ổ cứng
- Dùng các phần mềm diệt virut Spybot S &D hay Ad-aware như Ad-aware và Spybot-Search & Destroy,HijackThis ....

Các bạn có ư kiến nào khác xin post lên để mọi người học tập
_________________
Hồ Thanh Nhân
10660201
Mục quản : 5
Back to top Go down
sgialong




Age : 20
Joined : 02 Dec 2007
Posts : 7
Localisation : Mục Quản của em là 51-MSSV:10660175-TH06A1

PostSubject: hibernatesetup và key Kaspersky_Anti-Virus_6.0.y   3/12/2007, 17:36

http://www.mediafire.com/?1jytn2hvmun
Đây là link dow hibernatesetup.reg theo ư của thầy , trong file ḿnh có kèm theo key 3 năm sử dụng cho phần mềm diệt vius đáng tin cậy Kaspersky_Anti-Virus_6.0, do phần mềm này khó đăng kư nên nhân tiện ḿnh đưa luôn key này bảo đảm ko bị blacklist ( phát hiện key dơm), khi cày xong phần mềm này các bạn ko cần update , nó tự động âm thầm update cho ḿnh, ḿnh muốn nó tự động update hay 2 ngày update 1 lần th́ tùy ḿnh chọn chế độ.
Nếu bạn nào chưa có phần mềm cài đặt th́ nói ở trên đây, ḿnh sẽ upfile lên hoặc các bạn t́m trên mạng, nhớ là key này dùng cho Kaspersky_Anti-Virus_6.0 , hiện giờ th́ phần mềm này tuột hạng,năm vừa rồi hạng 1 xuống c̣n hạng 4, nhưng hàng năm vẫn đứng trong top.
Back to top Go down
sgialong




Age : 20
Joined : 02 Dec 2007
Posts : 7
Localisation : Mục Quản của em là 51-MSSV:10660175-TH06A1

PostSubject: sorry   3/12/2007, 17:53

h́nh như link đó bị die rồi, sorry mấy bạn
http://www.mediafire.com/?dljjmj0eazn
trong đó kèm theo 1 phần mềm có tác dụng giúp ta kiểm tra hệ thống có keylog hay ko.i'm sorry.
Back to top Go down
duong911




Age : 20
Joined : 04 Dec 2007
Posts : 2
Localisation : T6A1

PostSubject: Re: Thao luan (lop TH06A1)   4/12/2007, 03:15

may cái link cua sang vào kô đựôc ? Sang coi lại nhé..
Back to top Go down
dtsang




Age : 20
Joined : 17 Sep 2007
Posts : 8

PostSubject: GoiYLamBaiThiThucHanh   5/12/2007, 15:11

Gợi ư làm bài Thi Thực hành đề 1(ca 1): http://www.mediafire.com/?03wmqxkjyem
Những hướng dẫn sau đây chủ yếu là dựa vào Code của bạn Thạch Trương Thảo cung cấp.Ḿnh chỉ thêm bớt chút xíu àh,nên vẫn chưa hoàn thiện. Mong các bạn nào hoàn thiện bài này rồi góp ư dùm.
1/Link download chương tŕnh : http://www.mediafire.com/?3k7dz0xjqio
2/Giải thích code chi tiết :
Code Câu 1:
//Khai báo các hàm thư viện C++
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
//Khai báo BUFFER_SIZE = 10
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE]; //tạo mảng buffer kiểu int có 10 phần tử
char s[BUFFER_SIZE]; //tạo mảng s kiểu char có 10 phần tử
// các biến toàn cục
int in = 0;
int out = 0;
int nextProduced = 1;
HANDLE semEmpty; // semEmpty dùng để quản lư số vùng trống trong mảng buffer
HANDLE semFull; // semFull dùng để quản lư số sản phẩm trong mảng buffer
HANDLE semP; // semEmpty dùng quản lư số sản phẩm mà cả P1 và p2 sản xuất được
CRITICAL_SECTION critSec; // Biến kiểu Mutex
void Producer(void * p){
while (1){

WaitForSingleObject(semP, INFINITE); //chờ đến khi có tín hiệu từ Panel
WaitForSingleObject(semEmpty, INFINITE); //chờ đến khi có chỗ trống
EnterCriticalSection(&critSec); //vào vùng tương tranh
buffer[in]=nextProduced++; //đưa sản phẩn tiếp theo vào mảng buffer
switch ((int)p){
case 1:
s[in]='P'; //đưa kư tự “P” vào mảng s[]
break;
case 2:
s[in]='p';
break;
default:
s[in]='S';
};
ReleaseSemaphore(semFull, 1, NULL); //tăng giá trị của đèn hiệu có mục quản lưu trong biến semFull lên 1
in=(in+1)%BUFFER_SIZE; //tăng biến in lên 1
LeaveCriticalSection(&critSec); //rời khỏi vùng tương tranh
Sleep(1000); //cho luồng ngủ trong 1 giây
}
}

void Consumer(){
int nextConsumed;
while (1){
WaitForSingleObject(semFull, INFINITE); // Chờ đến khi có sản phẩm
EnterCriticalSection(&critSec);
nextConsumed=buffer[out]; //gán giá tri của buffer tại vị trí out cho nextConsumed
out=(out+1)%BUFFER_SIZE; //tăng biến out lên 1
ReleaseSemaphore (semEmpty, 1, NULL); //Tăng (semEmpty) lên 1
LeaveCriticalSection(&critSec);
Sleep(2000); // cho luồng ngủ trong 2 giây

}
}

void ShowBuffer(){ //In nội dung buffer
const char * LeftMargin="\n ";
int i;
printf(LeftMargin);
for(i=0; i<(in*5); i++) putchar(' '); printf("!in");
printf(LeftMargin);
for (i=0; i<BUFFER_SIZE-1; i++)
printf("%c%2d, ", s[i], buffer[i]);
printf("%c%2d", s[BUFFER_SIZE-1], buffer[BUFFER_SIZE-1]);
printf(LeftMargin);
for(i=0; i<(out*5); i++) putchar(' ');
printf("^out");
printf("\n");
}

int main(){
//Khai báo các biến lưu mục quản các luồng
HANDLE ProducerHandle1, ProducerHandle2;
HANDLE ConsumerHandle1, ConsumerHandle2;
DWORD ProducerID1, ProducerID2;
DWORD ConsumerID1, ConsumerID2;
semEmpty=CreateSemaphore(0, BUFFER_SIZE, BUFFER_SIZE, 0); //Tạo đèn hiệu có giá trị ban đầu là 10,giá trị tối đa là 10, có mục quản lưu vào biến semEmpty (v́ ban đầu chưa có sản phẩm nào nên ban đầu semEmpty có 10 chỗ trống)
semFull=CreateSemaphore(0, 0, BUFFER_SIZE, 0); //Tạo đèn hiệu có giá trị ban đầu là 0,giá trị tối đa là 10, có mục quản lưu vào biến semFull (v́ lúc đầu chưa có sản phẩm nào được sản xuất nên giá trị ban đầu của semFull là 0)
semP=CreateSemaphore(0, 4, 100, "semP"); //Tạo đèn hiệu có tên “semP”,giá trị ban đầu là 4, tối đa là 100 ,có mục quản lưu vào biến semP. Sở dĩ chọn gtri ban đầu là 4 v́ đề bài yêu cầu sản xuất xong 2 sản phẩm của P1 và 2 sản phẩm của P2 mới chờ tín hiệu từ Panel..Đây là đèn hiệu giúp liên lạc được giữa C# và C++.
InitializeCriticalSection(&critSec); //khởi động vùng tương tranh
//Tạo các luồng trong trạng thái thi hành ngay
ProducerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer, (void *) 1, 0, &ProducerID1);
ProducerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Producer, (void *) 2, 0, &ProducerID2);
ConsumerHandle1=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer, 0, 0, &ConsumerID1);
ConsumerHandle2=CreateThread(0,0,
(LPTHREAD_START_ROUTINE)Consumer, 0, 0, &ConsumerID2);
//Cứ 2 giây th́ ShowBuffer.Để việc ShowBuffer được chính xác th́ hàm ShowBuffer phải được đặt trong vùng tương tranh.
while(1)
{
EnterCriticalSection(&critSec);
ShowBuffer();
LeaveCriticalSection(&critSec);
Sleep(2000);
}
}
-----------------------------------------------------------------
Code Câu 2 :
//Khai báo các hàm hệ thống cần thiết cho việc thao tao với luồng và kết nối
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace Panel
{
public partial class Form1 : Form
{
Semaphore semP; //Khai báo biến semP có Kiểu Semaphore dùng để lưu mục quản của đèn hiệu
static int PortNumber = 3000; //cổng 3000
UdpClient udpClient = new UdpClient(PortNumber); // tạo udpClient có cổng 3000
Thread receiveThread; // khai báo biến luồng receiveThread
Form frm; // khai báo biến frm dạng form
public Form1()
{
semP = new Semaphore(4, 100, "semP"); //Tạo đèn hiệu tên “semP” có gtri ban đầu là 4, gtri lớn nhất là 100, có mục quản lưu vào biến semP.Đây là đèn hiệu liên tiến tŕnh
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
semP.Release(Convert.ToInt32(textBox1.Text)); //dùng để quản lư số sản phẩm sản xuất được của P1 và P2, số lượng sản phẩm đc nhập từ textbox1
}
private void Form1_Load(object sender, EventArgs e)
{
this.frm = this; // frm là from hiện hành
receiveThread = new Thread(new ThreadStart(ReceiveData)); //Tạo luồng nhận giữ liệu
receiveThread.IsBackground = true; //cho luồng nhận giữ liệu hoạt động ở chế độ nền
receiveThread.Start(); //Khởi động luồng này
}
private void ReceiveData()
{
IPEndPoint RemoteIpEndPoint; //IPEndPoint object will allow us to read datagrams sent from any source.
while (true)
{
try
{
RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); // RemoteIpEndPoint lưu địa chỉ IP của máy gửi thông điệp
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); //Chuyển thông điệp nhận đc từ máy có IP lưu trong RemoteIpEndPoint sang mảng byte.
string returnData = Encoding.UTF8.GetString(receiveBytes); //chuyển thông điệp sang kiểu String
if (returnData != null)
{
semP.Release(Convert.ToInt32(returnData)); //Quản lư số sản phẩm của P1 và P2, số lượng sản phẩm nhận từ returnData
}
}
catch (Exception err)
{
// Xử lư lỗi truyền thông
}
}
}
}
}
--------------------------------------------
Code Câu 3 :
using System.Net;
using System.Net.Sockets;
namespace RemotePanel
{
public partial class Form1 : Form
{

static int PortNumber = 2003;//cổng 2003
UdpClient udpClient = new UdpClient(PortNumber); //tạo mới udpClient có cổng 2003
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Byte[] sendBytes = Encoding.UTF8.GetBytes(textBox3.Text);// Chuyển thông điệp cần gửi lấy từ textBox3 sang mảng Byte udpClient.Connect(textBox1.Text,Convert.ToInt32(textBox2.Text)); // Kềt nối với máy có IP trong textBox1 , và có Port trong textBox2
udpClient.Send(sendBytes, sendBytes.Length); //Gửi toàn bộ thông thông điệp cho máy vừa kết nối
udpClient.Close(); //đóng udpClient này
udpClient = new UdpClient(PortNumber); //Tạo mới udpClient có cổng 2003
}
}
}

3/Nhận Xét :
-Ưu : giữa các chương tŕnh RemotePanel,Panel và Sản xuất tiêu thụ có sự liên lạc thống nhất với nhau
-Khuyết : Chỉ dùng được 1 đèn hiệu semP để quản lư số sản phẩm của cả P1 và P2 nên không đúng trọng tâm của đề bài yêu cầu.
4/Lưu ư : Đây chỉ là bài tham khảo thôi,chưa hoàn thiện v́ vậy các bạn có thể dựa vào đây để phát triển thêm.Ḿnh cũng đang suy nghĩ cách dùng 2 đèn hiệu semP1 để quản lư số san pham của P1 và semP2 để quản lư số spham của P2.

-------------------------------------------------------------------

MSSV : 10660225
Mục quản: 53
Tên: Dương Thanh Sang
Back to top Go down
dtsang




Age : 20
Joined : 17 Sep 2007
Posts : 8

PostSubject: GiaiDeThiThucHanhCa1   10/12/2007, 20:14

Trước khi post bài làm này ḿnh xin chân thành cảm ơn bạn Thiên Ân đă cung cấp code cho diễn đàn.Nhờ những đoạn code của bạn mà giúp ḿnh hiểu thêm về môn học và thấy thích thú với môn Hệ Điều Hành.Những tŕnh bày về bài thi dưới đây của ḿnh có thể coi là hoàn thiện hơn bài trước ḿnh đă post rất nhiều.
1/Link download chương tŕnh và code của 3 câu :
2/Giải thích code (bổ sung thêm 1 số cái mà ḿnh vừa hiểu được)
3/Nhận xét
-------------oOo--------------
1/Link
http://www.mediafire.com/?5hkd2jnvkoz

2/Giải thích Code :

Câu 1:
//Khai báo các hàm thư viện C++
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
//Khai báo BUFFER_SIZE = 10
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE]; //tạo mảng buffer kiểu int có 10 phần tử
char s[BUFFER_SIZE]; //tạo mảng s kiểu char có 10 phần tử
// các biến toàn cục
int in = 0;
int out = 0;
int nextProduced = 1;
HANDLE semEmpty; // semEmpty dùng để quản lư số vùng trống trong mảng buffer
HANDLE semFull; // semFull dùng để quản lư số sản phẩm trong mảng buffer
HANDLE semP1; // semEmpty dùng quản lư số sản phẩm mà P1 sản xuất được
HANDLE semP2; // semEmpty dùng quản lư số sản phẩm mà P2 sản xuất được
CRITICAL_SECTION critSec; // Biến kiểu Mutex
void Producer(void * p){
while (1){

if((int)p==1)
WaitForSingleObject(semP1, INFINITE);//sau khi Producer có mă hiệu là 1 sản xuất xong 2 xản phẩm th́ sẽ chờ cho đến khi có tín hệu từ Panel
else
if((int)p==2)
WaitForSingleObject(semP2, INFINITE);//sau khi Producer có mă hiệu là 2 sản xuất xong 2 xản phẩm th́ sẽ chờ cho đến khi có tín hệu từ Panel
WaitForSingleObject(semEmpty, INFINITE); //chờ đến khi có chỗ trống
EnterCriticalSection(&critSec); //vào vùng tương tranh
buffer[in]=nextProduced++; //đưa sản phẩn tiếp theo vào mảng buffer
switch ((int)p){
case 1:
s[in]='P'; //đưa kư tự “P” vào mảng s[]
break;
case 2:
s[in]='p';
break;
default:
s[in]='S';
};
ReleaseSemaphore(semFull, 1, NULL); //tăng giá trị của đèn hiệu có mục quản lưu trong biến semFull lên 1
in=(in+1)%BUFFER_SIZE; //tăng biến in lên 1
LeaveCriticalSection(&critSec); //rời khỏi vùng tương tranh
Sleep(1000); //cho luồng ngủ trong 1 giây
}
}

void Consumer(){
int nextConsumed;
while (1){
WaitForSingleObject(semFull, INFINITE); // Chờ đến khi có sản phẩm
EnterCriticalSection(&critSec);
nextConsumed=buffer[out]; //gán giá tri của buffer tại vị trí out cho nextConsumed
out=(out+1)%BUFFER_SIZE; //tăng biến out lên 1
ReleaseSemaphore (semEmpty, 1, NULL); //Tăng (semEmpty) lên 1
LeaveCriticalSection(&critSec);
Sleep(2000); // cho luồng ngủ trong 2 giây

}
}

void ShowBuffer(){ //In nội dung buffer
const char * LeftMargin="\n ";
int i;
printf(LeftMargin);
for(i=0; i<(in*5); i++) putchar(' '); printf("!in");
printf(LeftMargin);
for (i=0; i<BUFFER_SIZE-1; i++)
printf("%c%2d, ", s[i], buffer[i]);
printf("%c%2d", s[BUFFER_SIZE-1], buffer[BUFFER_SIZE-1]);
printf(LeftMargin);
for(i=0; i<(out*5); i++) putchar(' ');
printf("^out");
printf("\n");
}

void main(){
//Khai báo các biến lưu mục quản các luồng
HANDLE ProducerHandle1, ProducerHandle2;
HANDLE ConsumerHandle1, ConsumerHandle2;
DWORD ProducerID1, ProducerID2;
DWORD ConsumerID1, ConsumerID2;
semEmpty=CreateSemaphore(0, BUFFER_SIZE, BUFFER_SIZE, 0); //Tạo đèn hiệu có giá trị ban đầu là 10,giá trị tối đa là 10, có mục quản lưu vào biến semEmpty (v́ ban đầu chưa có sản phẩm nào nên ban đầu semEmpty có 10 chỗ trống)
semFull=CreateSemaphore(0, 0, BUFFER_SIZE, 0); //Tạo đèn hiệu có giá trị ban đầu là 0,giá trị tối đa là 10, có mục quản lưu vào biến semFull (v́ lúc đầu chưa có sản phẩm nào được sản xuất nên giá trị ban đầu của semFull là 0)
semP1=CreateSemaphore(0, 2, 100, "semP"); //Tạo đèn hiệu có tên “semP1”,giá trị ban đầu là 2, tối đa là 100 ,có mục quản lưu vào biến semP1. Sở dĩ chọn gtri ban đầu là 2 v́ đề bài yêu cầu P1 sản xuất xong 2 sản phẩm rồi mới chờ tín hiệu từ Panel..Đây là đèn hiệu giúp liên lạc được giữa C# và C++.
semP2=CreateSemaphore(0, 2, 100, "semP"); //Tạo đèn hiệu có tên “semP2”,giá trị ban đầu là 2, tối đa là 100 ,có mục quản lưu vào biến semP2. Sở dĩ chọn gtri ban đầu là 2 v́ đề bài yêu cầu P2 sản xuất xong 2 sản phẩm rồi mới chờ tín hiệu từ Panel..Đây là đèn hiệu giúp liên lạc được giữa C# và C++.
InitializeCriticalSection(&critSec); //khởi động vùng tương tranh
//Tạo các luồng trong trạng thái thi hành ngay ProducerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Producer, (void *) 1, 0, &ProducerID1);
ProducerHandle2=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Producer, (void *) 2, 0, &ProducerID2);
ConsumerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Consumer, 0, 0, &ConsumerID1);
ConsumerHandle2=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Consumer, 0, 0, &ConsumerID2);
//Cứ 2 giây th́ ShowBuffer.Để việc ShowBuffer được chính xác th́ hàm ShowBuffer() phải được đặt trong vùng tương tranh.
while(1)
{
EnterCriticalSection(&critSec);
ShowBuffer();
LeaveCriticalSection(&critSec);
Sleep(2000);
}
}

Câu 2:
//Khai báo các hàm hệ thống cần thiết cho việc thao tao với luồng và kết nối
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace Panel
{
public partial class Form1 : Form
{
Semaphore semP1; //Khai báo biến semP1 có Kiểu Semaphore dùng để lưu mục quản của đèn hiệu "semP1"
Semaphore semP2; //Khai báo biến semP2 có Kiểu Semaphore dùng để lưu mục quản của đèn hiệu "semP2"
static int PortNumber = 3000; //cổng 3000
UdpClient udpClient = new UdpClient(PortNumber); // tạo udpClient có cổng 3000
Thread receiveThread; // khai báo biến luồng receiveThread
Form frm; // khai báo biến frm dạng form
public Form1()
{
semP1 = new Semaphore(2, 100, "semP1"); //Tạo đèn hiệu tên “semP1” có gtri ban đầu là 2, gtri lớn nhất là 100, có mục quản lưu vào biến semP1.Đây là đèn hiệu liên tiến tŕnh
semP2 = new Semaphore(2, 100, "semP2"); //Tạo đèn hiệu tên “semP2” có gtri ban đầu là 2, gtri lớn nhất là 100, có mục quản lưu vào biến semP2.Đây là đèn hiệu liên tiến tŕnh
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
semP1.Release(Convert.ToInt32(textBox1.Text)); //giá trị của đèn hiệu có mục quản lưu trong semP1 là giá trị đc nhập từ textbox1,dùng để quản lư số sản phẩm sản xuất được của P1
}
private void button2_Click(object sender, EventArgs e)
{
semP2.Release(Convert.ToInt32(textBox2.Text)); //giá trị của đèn hiệu có mục quản lưu trong semP2 là giá trị đc nhập từ textbox2,dùng để quản lư số sản phẩm sản xuất được của P2
}
private void Form1_Load(object sender, EventArgs e)
{
this.frm = this; // frm là from hiện hành
receiveThread = new Thread(new ThreadStart(ReceiveData)); //Tạo luồng nhận giữ liệu
receiveThread.IsBackground = true; //cho luồng nhận giữ liệu hoạt động ở chế độ nền
receiveThread.Start(); //Khởi động luồng này
}
private void ReceiveData()
{
IPEndPoint RemoteIpEndPoint; //IPEndPoint object will allow us to read datagrams sent from any source.
while (true)
{
try
{
RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); // RemoteIpEndPoint lưu địa chỉ IP của máy gửi thông điệp
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); //Chuyển thông điệp nhận đc từ máy có IP lưu trong RemoteIpEndPoint sang mảng byte.
string returnData = Encoding.UTF8.GetString(receiveBytes); //chuyển thông điệp sang kiểu String
if (returnData != null)
{
semP1.Release(Convert.ToInt32(returnData)); //Giá trị của đèn hiệu có mục quản lưu trong semP1 lúc này là returnData.
}
}
catch (Exception err)
{
// Xử lư lỗi truyền thông
}
}
}
}
}

Câu 3: Giải thích Code tương tự như bài viết trước

3/Nhận xét :
-Ḿnh đă text các code này ở nhà , kết quả đúng như đề bài yêu cầu.Các có thể dựa vào code này để trả lời vấn đáp

Chúc Các Bạn Thành Công!!
--------------oOo-----------------
Tên : Dương Thanh Sang
MSSV : 10660225
Mục Quản Cũ : 53
Mục Quản Khi Thi : 77
Back to top Go down
thanhtu




Joined : 11 Sep 2007
Posts : 2

PostSubject: Re: Thao luan (lop TH06A1)   10/12/2007, 21:46

Thanks bác Sang nhiều nha!
Công nhận sau khi đọc xong code này thấy hok có j` cao siêu hết!
Dzậy mà lúc thi lại ko nghĩ ra chứ!Bùn thiệt! Crying or Very sad
------------------------------
Nguyễn Thanh Tú
Mục quản:54
Vietnam 3 - 0 Myanma
VIỆT NAM VÔ ĐỊCH
Back to top Go down
TrQTuan




Joined : 13 Sep 2007
Posts : 36

PostSubject: Re: Thao luan (lop TH06A1)   27/12/2007, 10:16

"Em công nhận là tắt máy nhanh thật .trong ṿng 3 giây là máy tính tắt liền.Hoặc các bạn mở Notepad tạo thêm 1 file save với tên là .bat :
gơ shutdown -s -t 01 , file này giúp ta shutdown nhanh hơn b́nh thường nhưng vẫn ko = hibernate."

Khi bạn dùng "trạng thái ngủ đông" th́ không có nghĩa là bạn tắt máy tính b́nh thường cho nên "trong ṿng 3 giây là máy tính tắt liền" cũng b́nh thương thôi bạn, theo ḿnh ai nói "t́nh trạng ngủ đông" là giam tuổi thọ của RAM th́ không đúng đâu, bởi v́ khi bạn dùng chức năng "ngủ đông", máy của bạn sẽ trong t́nh trạng chờ đợi (data vẫn nằm trong RAM không hề load ra, load vào), và khi dùng chứ năng này th́ máy tính của bạn luôn được "giữ ấm" (nếu nhu shutdown th́ khi dùng lại PC chưa kịp làm "nóng" th́ đă phải chạy rồi)
C̣n về đoạn code "shutdown -s -t 01" cái này không biết ḿnh thời gian là 00 (thay v́ 01) có bị ảnh hưởng ǵ không bạn?.......Ḿnh cũng nêu 1 cách nữ để tạo 1 file có tính năng nhu vậy nhu7ngk hông cần dùng Notepad, bạn có thể tạo 1 shorcut, trong phần "đường dẫn" bạn gơ tương tự như vậy cũng được
Back to top Go down

Thao luan (lop TH06A1)

View previous topic View next topic Back to top 
Page 5 of 6Goto page : Previous  1, 2, 3, 4, 5, 6  Next

Permissions of this forum:You cannot reply to topics in this forum
Hoc Tap :: Môn học HĐH :: Hệ Điều Hành-