women11 发表于 2009-11-2 23:07:42

多线程的问题

多线程的问题我正在编写多线程的软件,现在编译能通过,但点BEGIN时,出现下列问题,然后程序就崩溃了:

This thread or another thread is currently writing to the thread safe queue.


程序如下:

void CVICALLBACK ShowDataCallback (int Queue_Handle, unsigned intevent,int value, void *callbackData) ;//显示数据线程   
int CVICALLBACK GetDataThreadFunction ( void*GetData) ;//获取数据线程

int FunctionID ;//线程调用函数ID
int Queue_Handle;//线程安全队列句柄


int CVICALLBACK BIGIN (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:

CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,GetDataThreadFunction, NULL, FunctionID);
CmtScheduleThreadPoolFunctionAdv (DEFAULT_THREAD_POOL_HANDLE,GetDataThreadFunction,NULL,
THREAD_PRIORITY_HIGHEST , NULL, NULL, NULL, NULL,FunctionID) ;   

//*创建一个容纳1000个字节数据的队列,需要的时候还可以扩大*/
CmtNewTSQ (1000, sizeof ( BYTE) , OPT_TSQ_DYNAMIC_SIZE, Queue_Handle) ;   
   
// 使用线程安全队列,并创建队列回调函数ShowData   
CmtInstallTSQCallback ( Queue_Handle,EVENT_TSQ_QUEUE_SIZE,100,ShowDataCallback,NULL,CmtGetCurrentThreadID(),NULL) ;
CmtWaitForThreadPoolFunctionCompletion (DEFAULT_THREAD_POOL_HANDLE, FunctionID, 0);   
   
   
   
   break;
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////显示数据
void CVICALLBACK ShowDataCallback ( int Queue_HandleHandle, unsigned int   event,int value, void *callbackData)
{   
char ch={""}, ss={""},t,gg={""};   
   
   BYTE data;


CmtReadTSQData (Queue_Handle,data ,1, TSQ_INFINITE_TIMEOUT, 0); //写到data中

   sprintf(ch,"%02X ",data);
            strcat(gg,ch);

         SetCtrlVal(panelHandle,PANEL_TEXTBOX,"0x");
   SetCtrlVal(panelHandle,PANEL_TEXTBOX,gg);
   SetCtrlVal(panelHandle,PANEL_TEXTBOX,"\r\n");
   
}
///////////////////////////////////////////////////////////////////////////////////////获取数据      
CVICALLBACK GetDataThreadFunction ( void*GetData) //获取数据线程      
{
while(1)   
{
CmtWriteTSQData (Queue_Handle,kao, 1, TSQ_INFINITE_TIMEOUT, NULL);
}
   
return 0;   

}
















//////////////////////////////////////////////请大家指点下,找了几天了也不知道怎么回事,谢谢了

netcreature 发表于 2009-11-3 08:35:39

CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,GetDataThreadFunction, NULL, FunctionID);
CmtScheduleThreadPoolFunctionAdv (DEFAULT_THREAD_POOL_HANDLE,GetDataThreadFunction,NULL,
THREAD_PRIORITY_HIGHEST , NULL, NULL, NULL, NULL,FunctionID) ;
——有必要同时用这两条语句吗?

women11 发表于 2009-11-3 12:23:03

2# netcreature
我不太会用,设定优先级别只能用那个后面的函数把?
页: [1]
查看完整版本: 多线程的问题