»¥³âÁ¿ÊÇϵͳÄں˶ÔÏó£¬ËÓµÓоÍËÖ´ÐС£ËüÓëÁÙ½çÇø¹¤×÷ºÜÀàËÆ¡£²»Í¬´¦ÔÚÓÚ£º1¡¢»¥³âÁ¿¿ÉÒÔ¿ç½ø³Ì±ß½çͬ²½Ï̡߳£2¡¢¿ÉÒÔ¸ø»¥³âÁ¿È¡¸öÃû×Ö£¬Í¨¹ýÒýÓû¥³âÁ¿µÄÃû×ÖÀ´Ê¹ÓÃÒ»¸öÒÑÖªµÄ»¥³âÁ¿¶ÔÏó¡£
ʹÓû¥³âÁ¿Ö®ÀàµÄ¶ÔÏóÐèÒª·´¸´µ÷ÓÃϵͳÄںˣ¬ÆÚ¼äÐèÒª½øÐнø³ÌÉÏÏÂÎÄת»»ºÍ¿ØÖƼ¶±ðת»»£¬´ó¸ÅÐèÒªºÄ·Ñ400µ½600¸öʱ¼äÖÜÆÚ¡£
ÓÖÊÇͼÊé¹ÝµÄ±ÈÓ÷£¬ÏÖÔÚÊǸãÒ»¸öËø£¬°ÑÔ¿³×£¨»¥³âÁ¿¾ä±ú£©½»¸ø¹ÜÀíÔ±£¨²Ù×÷ϵͳ£©£¬Ã¿Ò»¸öÈË£¨Ị̈߳©ÏëÒª½èÊéµÄʱºò£¬¶¼ÒªÏò¹ÜÀíÔ±ÄÃÔ¿³×¡£µ±ÓÐÈËÔÚʹÓõÄʱºò£¬ÁíÒ»È˱ØÐëµÈ´ý£¬µÈµ½Ô¿³×ÓпյÄʱºò£¨»¥³âÁ¿½øÈëÐźÅ״̬£©£¬²ÅÄÜÄõ½Ô¿³×£¨ÓµÓÐÁ˾ä±ú£©°ìÀí½èÊéÒµÎñ£¨´Ëʱ»¥³âÁ¿½øÈë·ÇÐźÅ״ֱ̬µ½°ìÍêÒµÎñ£©¡£
ʹÓû¥³âÁ¿µÄ²½Ö裺
1¡¢ÉùÃ÷Ò»¸öÈ«¾ÖµÄ»¥³âÁ¿¾ä±ú±äÁ¿£¨var hMutex: THandle;£©£»
2¡¢´´½¨»¥³âÁ¿£ºCreateMutex(
lpMutexAttributes: PSecurityAttributes;
  ......
ÐźÅÁ¿Êǽ¨Á¢ÔÚ»¥³âÁ¿µÄ»ù´¡Ö®ÉÏ£¬Í¬Ê±¼ÓÈëÖØÒªÌØÐÔ£ºÌṩÁË×ÊÔ´¼ÆÊý¹¦ÄÜ£¬Òò´ËÔ¤¶¨ÒåÊýÁ¿µÄÏß³Ìͬʱ¿ÉÒÔ½øÈëͬ²½µÄ´úÂë¿éÖС£
ÐźÅÁ¿ÊÇά»¤0µ½Ö¸¶¨×î´óÖµÖ®¼äµÄ¼ÆÊýÆ÷µÄͬ²½¶ÔÏ󣬵±Ïß³ÌÍê³ÉÒ»´ÎÐźÅÁ¿µÄµÈ´ýʱ£¬¼ÆÊýÆ÷×Ô¼õ1£¬µ±Ïß³ÌÊÍ·ÅÐźÅÁ¿¶ÔÏóʱ£¬¼ÆÊýÆ÷×ÔÔö1¡£
½èÓÃÉÏÃæµÄͼÊé¹ÝÀý×Ó£¬ÐźÅÁ¿ºÃÏñÊǶàÉ輸°Ñ¹ÜÀíÔ¿³×¡£Ã¿´Î¿ÉÒÔÉ趨N°ÑÔ¿³×ͬʱ¹¤×÷£¬ÄǾÍÓÐN¸öÈËÔ±¿ÉÒÔͬʱ°ìÀíÒµÎñ¡£
ÐźÅÁ¿Ê¹ÓõÄÒ»°ã²½Ö裺
1¡¢ÉùÃ÷Ò»¸öÈ«¾ÖµÄÐźÅÁ¿Ãû±ú£¬È磺hSem:THandle;
2¡¢´´½¨ÐźÅÁ¿£ºCreateSemphore(
lpSemaphoreAttributes:PSecurityAttributes;
lInitialCount,lMaximumCount:LongInt;
......
EventʼþÓ÷¨ÓëMutex²î²»¶à£¬µ«Ëü¿ÉÒÔʹÓãºSetEvent£¨Æô¶¯ÔËÐУ©ResetEvent£¨ÔÝÍ£ÔËÐУ©¡¢PulseEvent£¨Ö´ÐÐÒ»´ÎºóÁ¢¼´ÔÝÍ££©¡£
ÏÈ¿´Ò»Ï´´½¨º¯Êý£ºCreateEvent(
lpEventAttributes: PSecurityAttributes;
bManualReset: BOOL;
bInitialState: BOOL;
&nbs ......
Ò»¸öÏ̵߳ÄÓÅÏȼ¶È¡¾öÓÚ´´½¨Ï̵߳Ľø³ÌµÄÓÅÏȼ¶£¨priority class£©ºÍÏ̱߳¾ÉíÏà¶ÔµÄÓÅÏȼ¶£¨relative priority£©¡£
1¡¢½ø³ÌÓÅÏȼ¶£º
²»Í¬²Ù×÷ϵͳ ÓÅÏȼ¶ÊýÄ¿²»Í¬¡£Windows2000ÒÔÉϵİ汾ÁбíÈçÏ£º
Idle£º£¨±êÖ¾£ºIDLE_PRIORITY_CLASS£¬ÖµÎª$40£©£»
Below Normal£º£¨±êÖ¾£ºBELOW_NORMAL_PRIORITY_CLASS£¬ÖµÎª$4000£©£»
Normal£º£¨±êÖ¾£ºNORMAL_PRIORITY_CLASS£¬ÖµÎª$20£©£»
Above Normal£º£¨±êÖ¾£ºABOVE_NORMAL_PRIORITY_CLASS£¬ÖµÎª$8000£©£»
High£º£¨±êÖ¾£ºHIGH_PRIORITY_CLASS£¬ÖµÎª$80£©£»
Realtime£º£¨±êÖ¾£ºREALTIME_PRIORITY_CLASS£¬ÖµÎª$100£©¡£
½ø³ÌµÄȱʡÓÅÏȼ¶ÎªNormal£¬¼¸ºõËùÓг¡ºÏ¶¼²»Ó¦½«ÓÅÏȼ¶ÉèΪRealtime¡£
´´½¨½ø³Ìʱ¸ø¶¨ÓÅÏȼ¶£¬Ö»ÒªÔÚCreateProcessÖУ¬½«ÓÅÏȼ¶±êÖ¾×ö“OR”²Ù×÷£¬ÌîÈëdwCreationFlags²ÎÊýÖС£
È¡µÃ»î¶¯½ø³ÌµÄÓÅÏȼ¶£º
function GetPriorityClass(hProcess:THandle):DWORD;stdcall;
ÉèÖû½ø³ÌµÄÓÅÏȼ¶£º
function SetPriorityClass(hProcess:THandle;dwPriorityClass:DWORD);BOOL;
£¨ÉÏÃæÁ½¸öº¯ÊýµÄhProcessÓÉGetCurrentProcessº¯Ê ......
ADO¶àÏß³ÌÊý¾Ý¿â²éѯͨ³£»á³öÏÖ3¸öÎÊÌ⣺
1¡¢CoInitialize ûÓе÷Óã¨CoInitialize was not called£©£»ËùÒÔ£¬ÔÚʹÓÃÈκÎdbGo¶ÔÏóǰ£¬±ØÐëÊÖ µ÷ÓÃCoInitializeºÍCoUninitialize¡£µ÷ÓÃCoInitializeʧ°Ü»á²úÉú"CoInitialize was not called"ÀýÍâ¡£
2¡¢»²¼²»ÔÊÐí»æ»£¨Canvas does not allow drawing£©£»ËùÒÔ£¬±ØÐëͨ¹ýSynchronize¹ý³ÌÀ´Í¨ÖªÖ÷Ï̷߳ÃÎÊÖ÷´°ÌåÉϵÄÈκοؼþ¡£
3¡¢²»ÄÜʹÓÃÖ÷ADOÁ¬½Ó£¨Main TADoConnection cannot be used!£©£»ËùÒÔ£¬Ïß³ÌÖв»ÄÜʹÓÃÖ÷Ïß³ÌÖÐTADOConnection¶ÔÏó£¬Ã¿¸öÏ̱߳ØÐë´´½¨×Ô¼ºµÄÊý¾Ý¿âÁ¬½Ó¡£
Delphi2007°²×°ºóÔÚX:\Program Files\Common Files\CodeGear Shared\DataĿ¼ÏÂÓÐÒ»¸ödbdemos.mdbÎļþ£¬ÓÃÀ´×÷Ϊ²âÊÔµÄÀý×Ó¡£dbdemos.mdbÖеÄcustomer±í±£´æÁ˿ͻ§ÐÅÏ¢£¬orders±íÖб£´æÁ˶©µ¥ÐÅÏ¢¡£
²âÊÔ³ÌÐòÁ÷³Ì´óÖÂÊÇÕâÑùµÄ£ºÔÚÖ÷´°ÌåÉÏ·ÅTADOConnectionºÍTQuery¿Ø¼þ£¬Æô¶¯Ê±Õâ¸öTQuery´ÓCustomer±íÖвé³ö¿Í»§±àÂëCustNoºÍ¹«Ë¾Ãû³ÆCompany£¬·Åµ½Èý¸öCombox¿òÖУ¬·Ö±ðÔÚÈý¸öÁбí¿òÖÐÑ¡¶¨¿Í»§¹«Ë¾Ãû³Æ£¬°´ÕÕ¹«Ë¾Ãû³ÆËù¶ÔÓ¦µÄ¿Í»§´úÂ뽨Á¢Èý¸öÏß³ÌͬʱÔÚorders±íÖвéѯÏúÊÛÈÕÆÚSa ......
ÉÏÎÄÖУ¬¶àÏß³Ìͬ²½Ö÷´°ÌåµÄLabelµÄCaptionÊôÐÔÖµ£¬·¢ÏÖÒ»¸öÎÊÌ⣺ʹÓÃSynchronizeÓÃÓÚͬ²½µÄʱºò£¬Ö÷´°ÌåºÃÏñËÀµôÒ»Ñù£»¶øÖ±½ÓÓÃ×Ó³ÌÐòΪLabelµÄÒýÓø³Öµ£¬ÔòÓÐʱ»á³öÏÖ“Canvas does not allow drawing”´íÎó¡£ÊéÉÏ˵VCLͬ²½Ò»¶¨ÒªÓÃSynchronize£¬¶ø²»ÄÜÖ±½Ó·ÃÎÊ¡£
²âÊÔ£º
{Ö÷´°Ìå}
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses TestThread;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
TTestThread.Create(Label1);
//TTestThread.Create(Label2);
//TTestThread.Create(Label3);
end;
end.{¶àÏß³ÌÀà}
unit TestThread;
interface
uses
Cla ......