- 論壇徽章:
- 0
|
在網(wǎng)上找了些,在沒(méi)有更理想的方案之前、實(shí)時(shí)性不高的前提下,暫時(shí)用CPU輪詢(xún)的方式可以實(shí)現(xiàn)。
思路:當(dāng)有USB打印機(jī)插入到ARM板上時(shí),/sys/class/usb/lp0文件會(huì)被自動(dòng)生成;當(dāng)拔出打印機(jī)時(shí),文件相應(yīng)地被刪除。因此可以創(chuàng)建一個(gè)線程每隔5s查詢(xún)這個(gè)文件lp0是否存在。
實(shí)現(xiàn):這種方法缺陷有二,對(duì)于嵌入式來(lái)講有些浪費(fèi)CPU,這是其一;其二,由于是隔一段時(shí)間T才掃描,當(dāng)用戶(hù)在T時(shí)間內(nèi)拔掉并重新插上另一個(gè)打印機(jī)時(shí),有可能被認(rèn)為lp0仍然是原來(lái)的打印機(jī),而非新插入的打印機(jī)。不過(guò)對(duì)于我的實(shí)際情況這個(gè)拙劣的方法還是可以忍受的。希望有朋友提出更好的方案。- void* monitor(void *arg) /* 監(jiān)視USB打印機(jī)是否接入 */
- {
- while(1)
- {
- while(lp0存在)
- {
- printf("打印機(jī)已接入.\n");
- sleep(5); /* 每隔5秒檢查一次lp0文件是否存在 */
- }
- printf("打印機(jī)已拔出.\n");
- sleep(5); /* 每隔5秒檢查一次lp0文件是否存在 */
- }
- }
- int main()
- {
- pthread_t tid;
- if (pthread_create(&tid, NULL, monitor, NULL)) /* 創(chuàng)建一個(gè)線程,用來(lái)監(jiān)視USB打印機(jī)的接入/拔出 */
- {
- printf("cannot create a thread in the calling process.\n");
- exit(0);
- }
- while(1); /* 此時(shí)main線程與monitor線程并發(fā)運(yùn)行 */
- return 0;
- }
復(fù)制代碼 |
|