一定の間隔の後に自分の機能を呼び出すタイマーを作りたいと思います。 私の特定のプロセスが完了するたびに、このタイマーを停止します。 ここに私はある時間後に呼びたい1つの関数がありますが、この関数ではパラメータを渡したいと思います。Cのタイマーに混乱があります
私の質問は以下のとおりです。
- この関数にパラメータを渡すにはどうすればよいですか?
- この目標を達成する方法はありますか?
現在、このコードを使用しています。あなたが私の目標についてのアイデアを得るために、私がコードの間に書いた私のコードコメントを読んでください。
コード:
#include <stdio.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <signal.h>
int main()
{
int result = 10;
int i =0;
// here I make timer which calls getP() function and I want to pass some
// parameter to my getP function from here.
// I don't want to make these variables global.
initSigaction();
initTime();
// other process thread. If this process will be completed then I have to stop timer.
pauseTime();
}
void initSigaction(void)
{
struct sigaction act;
act.sa_handler = getP;//;
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGPROF, &act, NULL);
}
void initTime(void)
{
struct itimerval val;
//printDebugLog(WIFI,"Timer value : %d",TIMER);
val.it_value.tv_sec = 1;
val.it_value.tv_usec = 0;
val.it_interval = val.it_value;
printf("\nProgress Timer started\n");
setitimer(ITIMER_PROF, &val, NULL);
}
void getP()
{
// I want to get some parameter from main function and want to do some
// calculation on this. How can I get that parameter?
printf("HI Hello");
}
int pauseTime(void)
{
struct itimerval val;
val.it_value.tv_sec = 0;
val.it_value.tv_usec = 0;
val.it_interval = val.it_value;
setitimer(ITIMER_PROF, &val, NULL);
printf("\n Stop Progress Timer\n");
return EXIT_SUCCESS;
}
getp()関数までパラメータを渡す規定はありますか? – user1089679
いいえ。シグナルハンドラに任意のデータを渡す手段はありません。グローバルまたは静的な関数の外で定義された変数を使用することは、必然的に終了します。また、シグナルハンドラで何が安全であるかについて厳しい制限があります。標準Cはほとんど何も許さない。 POSIXでは、いくつかの関数を呼び出すことができますが、多くはそうではありません(そして 'printf()'は安全な集合の中にはありません)。 –
@JonathanLefflerどうすればこのタイマーを停止できますか?ここで私はこのタイマー、これを行う正しい方法を停止するには、pauseTimer関数を使用していますか?シグナルのデフォルト値を設定する必要がありますか? – user1089679