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

關於service

尚未結案
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-22 17:30:36 IP:218.166.xxx.xxx 未訂閱
小弟最近在開發一個multithread的service程式。雖然程式完成compile後完全無誤,但一start service後就time out失敗了。 我將 thread1 *my1 = new thread1(); thread2 *my2 = new thread2(); ........ ........ Started = true; 四個threads 放在onStart的event handler裡 結果都time out。我並沒有在onExecute裡放任何的程式碼。 在每個thread裡都有一個dataModule,裡面放一些ado connection 和 adodataset。這些不算是visual component吧! 我曾用delphi開發過service也有用這些元件,只是沒用datamodule包起來,但run的很ok。 後來,將主程式改成由form來直呼叫這幾個thread,跑起來也沒問題… 實在搞不懂問題可能會在哪裡? 想請教各位高手,是不是我 new 的地方有錯? 不是放在 onstart 裡嗎? 還是我該放在onExcute裡? 還是在 onExcute裡該放ProcessRequests這個程序 (可是這好像是單thread時用)… 很多大程式都有用service,如mssql…我想應該不會因為thread本身大一點就不能用servicel來跑吧?? 我總覺得一定有技巧… 還請個位高手幫忙…這個程式的dead line剩幾天而已,慘… 謝謝 附帶一個怪問題,若在onstart裡加二行,第一行是ShowMessage("HI"),第二行started = true,結果一定也timeout! 可是在delphi裡同樣的程式,這個showmessage會跑出來。另外,我也曾把我的每個thread裡的程式變成最簡單的只有Beep(),其他位置寫法都沒變,結果也都很ok! 哇咧,實在是完全沒有任何的ideal能解決了!!! 發表人 - aftcast 於 2003/11/22 17:33:07 發表人 - aftcast 於 2003/11/22 17:38:56 發表人 - Gemi0305 於 2003/11/22 18:43:27
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-23 02:55:19 IP:61.64.xxx.xxx 未訂閱

版規就是版規

請盡快改po內容於delphi的那篇 或 準備被刪把 每個人來是討論 不是如你所說 只是解決問題 這樣KTOP的宗旨 還真是錯了方向 你讓我覺得 好像是交作業的狀態 每個人有問題應該都很急把 問題是要自己真正解決 還是解決你的每個問題 你的問題 先去這看看 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37320 mssql 是靠reg來註冊service [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySql] "Type"=dword:00000010 "Start"=dword:00000002 "ErrorControl"=dword:00000001 "ImagePath"=hex(2):43,00,3a,00,2f,00,41,00,70,00,70,00,53,00,65,00,72,00,76,00, 2f,00,6d,00,79,00,73,00,71,00,6c,00,2f,00,62,00,69,00,6e,00,2f,00,6d,00,79, 00,73,00,71,00,6c,00,64,00,2d,00,6e,00,74,00,2e,00,65,00,78,00,65,00,00,00 "DisplayName"="MySql" "ObjectName"="LocalSystem" [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySql\Security] "Security"=hex:01,00,14,80,a0,00,00,00,ac,00,00,00,14,00,00,00,30,00,00,00,02, 00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00, 00,00,02,00,70,00,04,00,00,00,00,00,18,00,fd,01,02,00,01,01,00,00,00,00,00, 05,12,00,00,00,00,00,00,00,00,00,1c,00,ff,01,0f,00,01,02,00,00,00,00,00,05, 20,00,00,00,20,02,00,00,00,00,00,00,00,00,18,00,8d,01,02,00,01,01,00,00,00, 00,00,05,0b,00,00,00,20,02,00,00,00,00,1c,00,fd,01,02,00,01,02,00,00,00,00, 00,05,20,00,00,00,23,02,00,00,00,00,00,00,01,01,00,00,00,00,00,05,12,00,00, 00,01,01,00,00,00,00,00,05,12,00,00,00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySql\Enum] "0"="Root\\LEGACY_MYSQL\\0000" "Count"=dword:00000001 "NextInstance"=dword:00000001 ================================================================== 不過重點是這個把 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySql\Security] "Security"= 這一個的引用
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-23 16:14:11 IP:61.219.xxx.xxx 未訂閱
引言:

版規就是版規

請盡快改po內容於delphi的那篇 或 準備被刪把 每個人來是討論 不是如你所說 只是解決問題 這樣KTOP的宗旨 還真是錯了方向 你讓我覺得 好像是交作業的狀態 每個人有問題應該都很急把 問題是要自己真正解決 還是解決你的每個問題
謝謝你的回應。 關於在delphi裡post一樣的問題:實在是覺得我的問題本身和語言無關,而是架構問題。而問題本身對我來說的確也是很急,於是才於二個地方post。我想人人都有很需要幫忙的時候…有熱心的人幫忙需要幫忙的人,而這些被幫的人有一日也許會幫別人。這裡是討論區但不也是許多了得到解答的地方嗎? 感謝一些人曾經幫我,而本人也在學習中,也算是這裡的菜鳥…也許目前沒有任何太多的貢獻,但有朝一日…… 也許是我的問題表達能力有問題,但也謝謝您的回應。對於delphi裡post的文章,我會去刪(不確定能刪與否),若不能刪就請版主砍了吧。若我發表不當,bcb這裡也可以把我刪了! 對不起,打擾各位了!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-23 16:43:52 IP:61.64.xxx.xxx 未訂閱
若我發表不當,bcb這裡也可以把我刪了! 你當然無法刪除整篇 但是可以修改內容 aftcast 兄 這摸怕被我糾正嗎 ? 你是否要再與KTOP共存 我是不知道 那是你的個人意願 我說的 該如何就如何 你明知重po是不當行為 就不應該再觸犯 並再delphi敘述 你是因為時間緊迫 而才如此 我的看法是 每個人當然都會有你的情況 但是不應該因為如何 就來個 心戰喊話 把原有的版規 視而不見 我的意思是 你將delphi那篇內容修改 至於bcb此版 因為比較早po所以 我先再此回應你的問題 別把自己的錯誤 變的好像我不近人情 你修改 我亦修正 請你別把規定當遊戲 這樣把 如果你覺得你因為沒貢獻 而渺小的話 你何不當當 站務之職 看看管理者的付出
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-24 23:46:16 IP:218.166.xxx.xxx 未訂閱
經過一段奮鬥追蹤後,程式獲得解決了! 分享一下感想。    1 若在service裡要加入自己的thread,且thread中有使用到com元件,如adoconnection或整個data module,並以動態的方式來create這些元件至heap時,一定要先使用CoInitialize來啟動com的環境,再new之,最後結束時再以CoUninitialize來解除。若少了初始的動作,則ado之類的com元件無法正確初始化而卡死,導至timeout。在研究這個問題的期間,曾查到過去有人問到類似的問題: http://delphi.ktop.com.tw/topic.php?topic_id=22690 他的答案應該也就是上述的答案吧。 2 問題中有題到 showmessage("show msg");這個procedure會卡死的原因是…沒有在property中設定interact為true時。然而這個showmessage在service中有其實用的價值,如當某ini檔找不到時可提示使用者。故在此也提出。 3 在為service debug時相當的麻煩,除了可以用attach的方式外,我覺得若是多緒的程式,可以先改以用一般的app來呼叫thread,如此先找出thread是否有問題比較容易。因為,service有很多的限制,如需定時以ipc回報scm,itc之間的連繫(雖vcl已經包起來了),若是沒在一定的時間內回應,就會掛點,那時要debug都難了。 待我的程式整理ok後,若可以的話,我將程式post上來給需要的人參考。 希望小小的心得能對一些人有小幫助。另外,也謝謝AB兄的指正,在delphi那裡的文章我已請版主砍了,但目前還未被砍,你提到去修改…實在不知該如何改之…目前並沒有純delphi上的問題。我想版主不久會去砍了吧。尚請見諒!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-25 00:02:15 IP:61.64.xxx.xxx 未訂閱
aftcast 兄  你的善意回應  我也會修改的 期待妳的分享 另外的一種寫法 可以參考
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-25 00:41:15 IP:218.166.xxx.xxx 未訂閱
引言: aftcast 兄 你的善意回應 我也會修改的 期待妳的分享 另外的一種寫法 可以參考 >< face="Verdana, Arial, Helvetica"> 謝謝AB兄您的提供意見,有您的熱心才使得知識能夠薪火相傳,大家受益!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2024-05-15 12:11:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!