全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2137
推到 Plurk!
推到 Facebook!

sleep的應用問題

尚未結案
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-11 09:48:18 IP:220.137.xxx.xxx 未訂閱
我寫了一個程式,是要送四個command到gsm模組, 但是這四個command之間,分別要延遲一段時間, 我是用sleep做,想請問我這樣寫哪裡不對呢? 因為會發生 Ambiguity between '_fastcall ldglobal::Sleep(unsigned int)' and '_stdcall Sleep(unsigned long)' 以下是我的程式 void __fastcall Tmain::Timer2Timer(TObject *Sender) { String Temp; char inbuff[1024]; DWORD nBytesRead, dwEvent, dwError; COMSTAT cs; ClearCommError(hComm1,&dwError,&cs); //取得狀態 if (cs.cbInQue > sizeof(inbuff)) // 資料是否大於我們所準備的Buffer { PurgeComm(hComm1, PURGE_RXCLEAR); // 清除COM 資料 return; } ReadFile(hComm1, inbuff,cs.cbInQue,&nBytesRead,NULL); // 接收COM 的資料 inbuff[cs.cbInQue]= '\0'; //陣列中的字串結尾處補上零字元 main->Memo2->Lines->Add(inbuff); // 將資料顯示於Memo2 上 Sleep(1000); if(hComm1==0) return; //檢查Handle值 Temp = "AT CMGR=?\r"; //取得傳送的字串 SendData = Temp1.c_str(); //字串轉換 BS = Temp.Length(); //取得傳送的字串數 WriteFile(hComm1, SendData,BS, &lrc, NULL); //送出資料 Sleep(1000); if(hComm1==0) return; //檢查Handle值 Temp = "AT CMGF=0\r"; //取得傳送的字串 SendData = Temp.c_str(); //字串轉換 BS = Temp.Length(); //取得傳送的字串數 WriteFile(hComm1, SendData,BS, &lrc, NULL); //送出資料 Sleep(1000); if(hComm1==0) return; //檢查Handle值 Temp = "AT CMGR=0\r"; //取得傳送的字串 SendData = Temp.c_str(); //字串轉換 BS = Temp.Length(); //取得傳送的字串數 WriteFile(hComm1, SendData,BS, &lrc, NULL); //送出資料 }
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-11 10:19:47 IP:61.64.xxx.xxx 未訂閱
因為你的Class ldglobal的Sleep()和Win32 API 的Sleep()同名, 所以Compiler不知道要用哪個, 解決方法就是加上Class名稱 ldglobal::Sleep,讓Compiler知道要使用ldglobal的Sleep(), 如果你是要用Win32 API 的Sleep(), 就直接call ::Sleep() 就可以了.
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-13 00:22:21 IP:211.74.xxx.xxx 未訂閱
我不太懂這個種Sleep有什麼不同耶! 我程式其它部分都沒有用到Sleep, 且如果是用API的Sleep那要宣告嗎?
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-13 09:07:12 IP:210.243.xxx.xxx 未訂閱
引言: 我不太懂這個種Sleep有什麼不同耶! 我程式其它部分都沒有用到Sleep, 且如果是用API的Sleep那要宣告嗎?
用Win API的Sleep在BCB不用特別宣告, 直接呼叫 ::Sleep()就可以了. 而要用哪一個就看你的需求, 或是說ldglobal的Sleep()有什麼特殊的 設計, 如果你只是單純的想要延遲程式, 用Win API的Sleep()就可以了.
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-13 16:24:36 IP:211.74.xxx.xxx 未訂閱
一般我們使用API的時候都要在程式中一開始的地方, 宣告#pragma,請問使用Sleep的時候我們要宣告哪一個呢?
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-13 17:02:21 IP:210.243.xxx.xxx 未訂閱
引言: 一般我們使用API的時候都要在程式中一開始的地方, 宣告#pragma,請問使用Sleep的時候我們要宣告哪一個呢?
Win API的Sleep宣告在Winbase.h, 但在BCB不用宣告就可使用, 因為BCB宣告在Windows.pas, 而#include 有#include
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-13 17:22:35 IP:211.74.xxx.xxx 未訂閱
sorry~~~我不太懂如果要用Win32 API 的Sleep(), 是要怎麼把我的程式中Sleep(1000)改成什麼啊?
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-13 17:47:44 IP:61.230.xxx.xxx 未訂閱
::Sleep(1000);
系統時間:2024-05-15 8:46:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!