Do đặc điểm của chương trình chat giữa Pocket PC và các máy tính để bàn có kết nối mạng là Pocket PC có khả năng cùng lúc có thể liên lạc được với nhiều máy tính để bàn, do đó trong ứng dụng này đòi hỏi phải sử dụng kỹ thuật lập trình song song. Trong MFC, có hỗ trợ cơ chế đa tuyến, ở đây chúng ta chỉ đề cập đến một vài thành phần của cơ chế đa tuyến để hỗ trợ cho ứng dụng minh họa.
Đa tuyến:
Cơ chế lập trình đa tiểu trình(MultiThread) cho phép ứng dụng có thể có nhiều tác vụ được xử lý song song. Điều này giúp cho chương trình tăng được hiệu quả tính toán và linh hoạt hơn trong xử lý.
Một tiểu trình cơ bản phải có hàm xử lý của tiểu trình (ThreadProc), hàm này sẽ chứa nội dung xử lý của tiểu trình. Có thể dung một số hàm khác nhau để tạo tiểu trình, chẳng hạn: CreateThread, _beginthread,AfxBeginThread....Ở đây ta sẽ khảo sát hàm CreateThread.
SEC_ATTRS SecurityAttributes, ULONG StackSize, SEC_THREAD_START StartFunction, PVOID ThreadParameter, ULONG CreationFlags, PULONG ThreadId );
Quan trọng nhất trong hàm này là tham số StartFunction, đây là hàm cài đặt cho thread cần tạo. ThreadParameter là một biến 4 byte được truyền vào hàm MyThread, biến pParam, nếu không cần truyền tham số, ta chỉ cần truyền NULL.
Cách kết thúc một tiểu trình.
Ngoài việc một luồng tự kết thúc khi hàm dùng để cài đặt luồng kết thúc, ta còn có thể yêu cầu luồng kết thúc tức thời. Tuy nhiên, việc kết thúc hàm theo kiểu “thô bạo” như vậy sẽ dẫn đến việc không hủy bỏ đúng đắn những tài nguyên đã được cấp như mở file, kết nối mạng...
Kết thúc luồng hiện hành: dùng hàm ExitThread(dwExitCode) trong đó dwExitCode là mã lỗi trả về, thường là bằng 0.
Để kết thúc một luồng khác ta phải có handle của luồng đó (hThread) được trả về khi tạo luồng, khi đó dùng hàm TerminateThread(hThread, dwExitCode) để kết thúc một luồng.
Tóm lại, để tạo một tiểu trình ta cần thực hiện theo các bước cơ bản sau đây:
Viết một hàm xử lý cho tiểu trình DWORD WINAPI ThreadProc( LPVOID lp)
{
}
Khai báo một biến kiểu HANDLE để giữ lại Handle của Thread ví dụ: HANDLE hThread; Gọi hàm CreateThread hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc NULL, 0, NULL); if (hThread == NULL) {
//Không tạo được Thread }
Khi muốn kết thúc thread ta gọi hàm TerminateThread như sau: TerminateThread(hThread, 0);//kết thúc luồng bất kỳ. Hoặc ExitThread(0);//Kết thúc luồng hiện hành.