|
多线程的问题我正在编写多线程的软件,现在编译能通过,但点BEGIN时,出现下列问题,然后程序就崩溃了:
This thread or another thread is currently writing to the thread safe queue.
程序如下:
void CVICALLBACK ShowDataCallback (int Queue_Handle, unsigned int event,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[250]={""}, ss[250]={""},t[100],gg[250]={""};
BYTE data[500];
CmtReadTSQData (Queue_Handle,data ,1, TSQ_INFINITE_TIMEOUT, 0); //写到data中
sprintf(ch,"%02X ",data[0]);
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;
}
//////////////////////////////////////////////请大家指点下,找了几天了也不知道怎么回事,谢谢了 |
|