保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

Windows CE下串行通信的实现


s。线程拥有优先级,所有高优先级的线程都将在低优先级的线程之前运行。在可以调度被设定为特定优先级的线程之前,所有拥有高优先级的线程都必须被阻塞。同等优先级的线程以循环方式来调度。如果高优先级的线程停止阻塞,而低优先级的线程目前正在运行,则低优先级的线程会立刻被挂起,同时去调度高优先级的线程。低优先级的线程永远不会抢占高优先级的线程,当然也有例外:一种是线程具有优先级THREAD_PRIORITY_TIME_CRITICAL,它永远不会被抢占;另一种就是低优先级的线程拥有高优先级的线程正在等待的资源,出现优先级倒置。在Windows CE中,线程可以有8种优先级。

下面是一个创建线程和线程函数的例子:

HANDLE hThread;

DWORD dwThreadID=0;

Int nParameter=5;

HThread=CreateThread(NULL,0,Thread,nParameter,0,&dwThreadID); //创建线程

CloseHandle(hThread); //关闭线程

//线程函数

DWORD WINAPI Thread (PVOID pArg)

{

int nParam=(int)pArg;

.

.

.

return 0x15;

}

CreateT

hread函数在许多参数在Windows CE下都不支持,所以被设为NULL或0。第3个参数指向线程函数的开始,第4个参数是CreateThread函数传到线程函数的唯一参数。CreateThread函数返回线程句柄,当这个句柄不需要时,调用CloseHandle函数关闭它。线程函数在被终止之前一直运行,调用ExitThread函数可终止线程的执行。

对于在系统中运行的多个线程,需要协调它们的活动,也就是实现同步。在Windows CE中,采用的方法是使用同步对象。一个线程等待一个同步对象,当用信号通知该对象时,解除阻塞正在等待的线程并调度该线程。同步对象包括事件和互斥体。在这里我们只介绍事件。

事件对象就是一种有两种状态——有信号和元信号的同步对象。事件被创建后自动被置为信号状态。事件可以被命名,从而被不同进程共享。采用下面的函数创建事件:

HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPTSTR lpName);

函数的第1个参数应为0,第2个参数表示事件成为有信号后应该人工重置或自动重置为无信号状态,第3个参数表示创建时事件是有信号还是无信号状态,最后一个参数指向事件名。被命名的事件可以被进程共享,否则就设为NULL。创建事件后,就可以采用SetEvent函数或者是PulseEvent函数用信号通知该事件。

SetEvent函数是自动重置事件,只释放一个线程来运行;PulseEvent函数是人工重置事件,释放所有等待那个事件的线程。最后可以用CloseHandle函数破坏事件对象。

事件的用法通常是,线程使用了下列函数中的一个来等待事件:WaitForSingleObject、WaitForMultipleObjects、MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx。当线程被这些函数的其中一个阻塞时,线程只消耗少量的电能和CPU处理能力。需要注意的是:应用程序的主线程不能被WaitForSingleObject或WaitForMultipleObjects阻塞,否则主线程无法处理消息循环。通常的做法是采用多线程,主线程处理消息循环,附加线程处理需要在事件上阻塞的共享资源。

《Windows CE下串行通信的实现(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/162492.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。